【问题标题】:Access dictionary within dictionary jinja在字典 jinja 中访问字典
【发布时间】:2020-01-09 07:47:57
【问题描述】:

我有一个名为 data 的字典列表。 对于我想要访问的数据中的every_archive every_archive['key1']['key2']

第一个键是常数:“单位”,但第二个键取决于循环。

我已经试过了:{{ archive['units'][{{item['param']}}] }}

其中item['param'] item 是循环中的另一个迭代器,item['param'] 是第二个键。

【问题讨论】:

标签: python html jinja2


【解决方案1】:

据我了解,您有一个包含一些嵌套字典的列表;如果是这样,并且您的数据看起来像这样:

data = [{'foo': {'bar1': 'buzz1', 'bar2': 'buzz2'}}, {'foo': {'bar3': 'buzz3', 'bar4': 'buzz4'}}]

如果你使用这个 Jinja2:

    {% for every_archive in data %} 
        {% for key1, archive1 in every_archive.items() %}
          {% for key2, value2 in archive1.items() %}
            <p>{{ key1 }} - {{ key2 }} - {{ value2 }}</p>
          {% endfor %}
        {% endfor %}
    {% endfor %}

你会得到这个输出:

foo - bar1 - buzz1

foo - bar2 - buzz2

foo - bar3 - buzz3

foo - bar4 - buzz4

同样,您将从

获得相同的输出
<p>{{ key1 }} - {{ key2 }} - {{ archive1[key2] }}</p>

【讨论】:

    【解决方案2】:

    请看下面的格式!该结构将与您在 Python 中遍历字典的方式非常相似,但是对于您不想显示的每个语句,使用 jinja {% %} 并在要显示的每个表达式周围使用 {{ }}。

    取自How to iterate through a list of dictionaries in jinja template?

    Data: parent_dict = [{'A':{'a':1}},{'B':{'b':2}},{'C':{'c':3}},{'D':{'d':4}}]
    
    In Jinja2 iteration:
    {% for dict_item in parent_dict %}
       {% for key1 in dict_item %}
          {% for key2 in dict_item[key1] %}
            <h2>Value: {{dict_item[key1][key2]}}</h2>
          {% endfor %}
       {% endfor %}
    {% endfor %}
    

    【讨论】:

    • 是的,这工作正常,但我的key2 不是字符串,是item['param'] 的值
    • 我不确定,我了解您的数据结构。你能举个例子吗?
    • 所以我在 HTML 中收到变量data,其中包含item,这是一个字典,我还收到details,它也是一个字典。然后我有{ % for elem in data['item'] %} &lt;p&gt; {{ details['units'][ elem['param'] ] }} &lt;/p&gt;。问题是elem['param'] 已经加入,我需要将它用作details 的第二个键。
    猜你喜欢
    • 2020-03-16
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多