Как добавить новую запись в объект словаря при использовании jinja2?
Я не могу добавить новую запись в словарь объекта при использовании шаблона jinja2.
Например, здесь я использую шаблон jinja2 и создал переменную data, которая является словарем. И после проверки некоторых условий if я хочу добавить атрибут местоположения к объекту данных, например
{%- set data = {
'name' : node.Name,
'id' : node.id,
}
-%}
{% if node.location !="" %}
data.append({'location': node.location})
{% endif %}
Однако я не смог найти способ добиться этого и получаю UndefinedError:
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'append'
Кто-нибудь сталкивался с этой проблемой или может предоставить ссылку для ее решения?
Я искал в Интернете, но не смог найти решение, то есть, как добиться добавления записи в объект dict в Jinja.
Я сослался на следующие и другие веб-ресурсы:
- http://cewing.github.io/training.codefellows/assignments/day22/jinja2_walkthrough.html
- В Jinja2, какой самый простой способ установить все ключи в значения словаря?
- https://github.com/saltstack/salt/issues/27494
Ответы
Ответ 1
Без расширения jinja2.ext.do
вы можете сделать это:
{% set x=my_dict.__setitem__("key", "value") %}
Не учитывайте переменную x
и используйте словарь, который теперь обновляется.
UPD: Кроме того, это работает для len()
(__len__()
), str()
(__str__()
), repr()
(__repr__()
) и многих подобных вещей.
Ответ 2
В словарях нет метода добавления. Вы можете добавить пару ключ-значение, как это:
{% do data['location']=node.location %}
или
{% do data.update({'location': node.location}) %}
Ответ 3
Ключевые вынос:
-
Словарь
- не поддерживает
append()
.
-
Вы можете добавить новый элемент в словарь данных, используя тег {% do ... %}
, как показано ниже:
{% do data.update({'location': node.location}) %}
-
Однако для правильной работы тега "do" вам нужно добавить расширение jinja2.ext.do
в среду jinja.
Ответ 4
Без расширения do
:
{%- set _ = dict.update({c.name: c}) -%}
Работает в базе Jinja2 на Python 3, где решения __setitem__
дают мне:
access to attribute '__setitem__' of 'dict' object is unsafe