通过django模板中的键获取字典值

kam*_*aki 3 python django django-templates

我有一本这样的字典:

myDict = {key1: item1,
          key2: item2}
Run Code Online (Sandbox Code Playgroud)

如果我有这样的嵌套字典,我如何通过在 django 模板中提供key1以及更多内容来获取item1

myDict2 = {key1: {key11: item11,
                  key12: item12},
           key2: {key21: item21,
                  key22: item22}}
Run Code Online (Sandbox Code Playgroud)

例如我怎样才能item22使用key22

我知道{{ myDict[key1] }}不起作用

Zev*_*Zev 6

简短的回答是查看Django 模板中的解决方案如何使用变量查找字典值,然后两次应用过滤器。

{{ myDict2|get_item:"key2"|get_item:"key22"}}
Run Code Online (Sandbox Code Playgroud)

更长的答案(大量来自我链接的答案)是:

  1. 在您的应用程序文件夹中创建一个文件夹 template_tags
  2. 在该文件夹中创建一个文件 custom_tags.py
  3. 在 custom_tags.py 中有来自其他答案的此代码:
from django.template.defaulttags import register

@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)
Run Code Online (Sandbox Code Playgroud)
  1. 在设置中注册您的自定义标签,添加库并保留其余的模板。
TEMPLATES = [
    {
        ...   
        'OPTIONS': {
            'context_processors': [   
            ],

            'libraries': {
            'custom_tags':'YOURAPP.template_tags.custom_tags'
            }
        },
    },
]
Run Code Online (Sandbox Code Playgroud)
  1. 在您的模板中:
{% load custom_tags %}

{{ myDict2|get_item:"key2"|get_item:"key22"}}
Run Code Online (Sandbox Code Playgroud)


Pad*_*eye 2

通常要迭代模板中的字典,如下所示......

{% for key, value in harvest_data.items %}
    {{ key }} <br>
    {% for key2,value2 in value.items %}
        {{ key2 }} <br>
        {% for key3, value3 in value2.items %}
            {{ key3 }}:{{ value3 }} <br>
        {% endfor %}
    {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

关于模板中的嵌套字典渲染,我认为这在这里得到了回答

嵌套字典中的 Django 模板