web-dev-qa-db-ja.com

jinja2を使用しながら、辞書オブジェクトに新しいエントリを追加する方法は?

Jinja2テンプレートを使用しているときに、辞書オブジェクトに新しいエントリを追加することはできません。

たとえば、ここではjinja2テンプレートを使用しており、辞書であるdata変数を作成しました。そしていくつかのif条件I[〜#〜] want [〜#〜]をチェックした後データオブジェクトにロケーション属性を追加する.

{%- 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'

この問題に直面した人や、これを解決するための参照を提供できる人はいませんか?

Webを検索しましたが、解決策、つまりJinjaのdictオブジェクトにエントリを追加する方法を見つけることができませんでした。

私は次のWebリソースや他のWebリソースを参照しました。

  1. http://cewing.github.io/training.codefellows/assignments/day22/jinja2_walkthrough.html
  2. Jinja2では、すべてのキーを辞書の値に設定する最も簡単な方法は何ですか?
  3. https://github.com/saltstack/salt/issues/27494
14
hemant_maverik

_jinja2.ext.do_拡張なしで、これを行うことができます:

_{% set x=my_dict.__setitem__("key", "value") %}
_

x変数を無視し、現在更新されている辞書を使用します。

UPD:また、これはlen()__len__())、str()__str__())、repr()__repr__())および同様の多くのもの。

辞書にはappendメソッドがありません。ただし、次のようなキーと値のペアを追加できます。

{% do data['location']=node.location %} 

または

{% do data.update({'location': node.location}) %}
9
alpert

重要なポイント:

  1. 辞書はappend()をサポートしていません。
  2. 次のように{% do ... %}タグを使用して、データディクショナリに新しいアイテムを追加できます。

    {% do data.update({'location': node.location}) %}
    
  3. ただし、「do」タグを適切に機能させるには、jinja2.ext.do拡張機能をjinja環境に追加する必要があります。

7
hemant_maverik