检查Jinja2模板中的Python dict中是否存在密钥

Ama*_*ony 44 python django jinja2

我有一个python字典:

settings = {
   "foo" : "baz",
   "hello" : "world"
}
Run Code Online (Sandbox Code Playgroud)

settings然后,此变量可在Jinja2模板中使用.

我想检查模板中dict中是否myProperty存在密钥settings,如果是,请执行以下操作:

{% if settings.hasKey(myProperty) %}
   takeSomeAction();
{% endif %}
Run Code Online (Sandbox Code Playgroud)

hasKey我可以使用的相当于什么?

tsh*_*lif 104

像Mihai和karelv所说,这有效:

{% if 'blabla' in item %}
  ...
{% endif %}
Run Code Online (Sandbox Code Playgroud)

'dict object' has no attribute 'blabla'如果我使用{% if item.blabla %}并且item不包含blabla密钥,我会得到一个

  • 我也是.在我的特殊情况下,我在Ansible中使用Jinja2. (3认同)

Mih*_*fir 13

很好用

Unable to manage file: Jinja variable 'dict object' has no attribute '[attributeName]'

注意:
如果{% if settings.myProperty %}存在,也会跳过,但会被评估为settings.myProperty(例如False).

  • 当setting.myProperty存在时,它等于零(整数0)或布尔值False,如果测试不是'hasKey'.这意味着你需要:``{%if'myProperty'in settings%}`` (13认同)
  • 这对我不起作用(至少使用ansible).我发现我需要`{%如果settings.myProperty定义为%}. (9认同)
  • 我不明白为什么这被接受作为答案 - 如果dict缺少密钥则会抛出错误.请更正答案. (9认同)
  • 是的,字典中的一把钥匙.相当于``hasKey``.顺便说一句,hasKey已被弃用.请改用``in`` (4认同)

ma3*_*oun 9

您可以通过以下方式测试键定义:

{% if settings.property is defined %}

#...
{% endif %}
Run Code Online (Sandbox Code Playgroud)

  • 您的答案检查对象属性,而不是字典键。 (10认同)