检查Jinja2模板中的Python dict中是否存在密钥
我有一本python字典:检查Jinja2模板中的Python dict中是否存在密钥,python,django,jinja2,Python,Django,Jinja2,我有一本python字典: settings = { "foo" : "baz", "hello" : "world" } 该变量设置随后在Jinja2模板中可用 我想检查我的模板中的设置dict中是否存在键myProperty,如果存在,请采取一些措施: {% if settings.hasKey(myProperty) %} takeSomeAction(); {% endif %} 我可以使用的hasKey的等价物是什么?这很好,但在涉及词典的情况下不起作用。在这些情
settings = {
"foo" : "baz",
"hello" : "world"
}
该变量设置
随后在Jinja2模板中可用
我想检查我的模板中的设置dict中是否存在键myProperty
,如果存在,请采取一些措施:
{% if settings.hasKey(myProperty) %}
takeSomeAction();
{% endif %}
我可以使用的hasKey的等价物是什么?这很好,但在涉及词典的情况下不起作用。在这些情况下,请参见tshalif的答案。
否则,使用SaltStack(例如),您将得到以下错误:
无法管理文件:Jinja变量“dict object”没有属性“[attributeName]”
如果您使用这种方法:
{%if settings.myProperty%}
注意:
如果存在settings.myProperty
,但被评估为False
(例如settings.myProperty=0
),则也将跳过此操作。如Mihai和karelv所述,此操作:
{% if 'blabla' in item %}
...
{% endif %}
如果我使用{%if item.blabla%}
并且项
不包含blablabla
键,则得到一个'dict object'没有属性“blablabla”
,您可以通过以下方式测试键定义:
{% if settings.property is defined %}
#...
{% endif %}
只要检查一下:如果settings[myproperty]不是None:我想这应该可以。或者如果settings.myproperty被定义了:myproperty
可以是上述方法中的一个变量吗?是的,字典中的一个键。相当于hasKey。顺便说一句,hasKey已经被弃用了。如果setting.myProperty存在,但它等于零(整数0)或布尔值False,则在
中使用,而不是在“hasKey”中进行测试。这意味着您需要:{%if'myProperty'in settings%}
这对我不起作用(至少对ansible不起作用)。我发现我需要{%if settings.myProperty被定义为%}
。我不明白为什么这会被接受为答案-如果dict缺少键,它会抛出一个错误。请更正答案。我也一样。在我的特殊情况下,我在Ansible中使用Jinja2。在Ansible中使用Jinja2。没什么帮助。{%if'blabla'在item%}
和{%if item.blabla%}
返回相同的'dict object'没有属性'blabla'
wtf???类型为'StringField'的参数不可iterable
。不适用于meThis看起来是检查dict中是否存在密钥的正确方法+1您的答案检查对象属性,而不是dict键。