hem*_*rik 14 python dictionary jinja2
在使用jinja2模板时,我无法追加向字典对象添加新条目.
例如,这里我使用的是jinja2模板,我创建了一个数据变量,它是一个字典.在检查了一些if条件之后我想要将location属性附加到数据对象,例如
{%- set data = {
'name' : node.Name,
'id' : node.id,
}
-%}
{% if node.location !="" %}
data.append({'location': node.location})
{% endif %}
Run Code Online (Sandbox Code Playgroud)
但是我找不到实现此目的的方法并且得到UndefinedError:
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'append'
Run Code Online (Sandbox Code Playgroud)
有没有人遇到这个问题或者可以提供解决这个问题的参考?
我在网上搜索但找不到解决方案,即如何在Jinja中为dict对象添加一个条目.
我已经提到了以下和其他网络资源:
Арс*_*гин 13
没有jinja2.ext.do扩展名,您可以这样做:
{% set x=my_dict.__setitem__("key", "value") %}
Run Code Online (Sandbox Code Playgroud)
忽略x变量并使用现在更新的字典.
UPD:此外,这适用于len()(__len__()),str()(__str__()),repr()(__repr__())和许多类似的东西.
字典没有append方法.您可以添加这样的键值对:
{% do data['location']=node.location %}
Run Code Online (Sandbox Code Playgroud)
要么
{% do data.update({'location': node.location}) %}
Run Code Online (Sandbox Code Playgroud)
关键要点:
append().您可以使用{% do ... %}标记将新项目添加到数据字典中,如下所示:
{% do data.update({'location': node.location}) %}
Run Code Online (Sandbox Code Playgroud)但是,jinja2.ext.do要使"do"标记正常工作,您需要将扩展名添加到jinja环境中.
没有do扩展名:
{%- set _ = dict.update({c.name: c}) -%}
Run Code Online (Sandbox Code Playgroud)
在 Python 3 上的基础 Jinja2 中工作,其中的__setitem__解决方案给了我:
access to attribute '__setitem__' of 'dict' object is unsafe
Run Code Online (Sandbox Code Playgroud)
小智 6
没有任何扩展名:
{% set d1 = {'a':'b', 'c':'d'} %}
{% set d2 = {'e':'f'} %}
{{ dict(d1, **d2) }}
Run Code Online (Sandbox Code Playgroud)
基本上,您将两个字典合并以创建一个新字典。由于它不使用任何扩展,因此它也适用于 Home Assistant。