從 Jinja 中的 JSON 陣列中獲取特定的變數物件很容易,例如:
array['somekey']
但是如果我想訪問嵌套串列中更深的值怎么辦:
array['somekey.subkey']
方括號內的這些點不起作用,所以我無法訪問可變位置的值?
想象一個簡單的物件陣列,如下所示。在模板中,我想設定一個變數來定義我想要到達的物件的路徑,這樣如果path
是somekey1
我得到somevalue1
但如果路徑是somekey3.subkey2
我得到subvalue2
像:
蟒蛇代碼
path = 'somekey3.subkey2'
神社模板代碼
{{ array[path] }}
預期結果:
subvalue2
實際結果:
no result (nothing gets printed on the screen)
完整的json陣列:
[{
"somekey1": "somevalue1"
}, {
"somekey2": "somevalue2"
}, {
"somekey3": {
"subkey1": "subvalue1",
"subkey2": "subvalue2"
}
}]
提前致謝!
uj5u.com熱心網友回復:
正如我的評論所說,您可能需要一個自定義過濾器來進行點訪問——幸運的是,實作起來并不難:
import jinja2
@jinja2.pass_environment
def dot(env: jinja2.Environment, obj, path):
for key in path.split("."):
obj = env.getattr(obj, key) # use same semantics as jinja's own getattr
return obj
env = jinja2.Environment()
env.filters["dot"] = dot
tpl = env.from_string("""
{{ obj | dot('somekey3.subkey2') }}
""".strip())
print(tpl.render(obj={
"somekey3": {
"subkey1": "subvalue1",
"subkey2": "subvalue2"
}
}))
輸出subvalue2
符合預期。
您也可以通過明智地使用isdigit
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/442680.html