Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查Jinja2模板中的Python dict中是否存在密钥_Python_Django_Jinja2 - Fatal编程技术网

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

检查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的等价物是什么?这很好,但在涉及词典的情况下不起作用。在这些情

我有一本python字典:

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键。