在django模板中按键获取字典值

时间:2018-06-05 15:16:48

标签: python django django-templates

我有这样的字典:

myDict = {key1: item1,
          key2: item2}

如何通过在django模板中提供 key1 来获取 item1 ,如果我有这样的嵌套字典,我该怎么办?

myDict2 = {key1: {key11: item11,
                  key12: item12},
           key2: {key21: item21,
                  key22: item22}}

例如,如何使用item22

获取key22

我知道{{ myDict[key1] }}无法正常工作

2 个答案:

答案 0 :(得分:2)

简短的回答是查看Django template how to look up a dictionary value with a variable处的解决方案,然后应用过滤器两次。

table += '<tr><td>{0}</td><td>{1}</td></tr>'% format(str(key)), 
format(str(value))
TypeError: not all arguments converted during string formatting

更长的答案(从我所链接的答案中大量采取)是:

  1. 在您的应用文件夹中创建文件夹template_tags
  2. 在该文件夹中创建一个文件custom_tags.py
  3. 在custom_tags.py中有来自其他答案的代码:
  4. {{ myDict2|get_item:"key2"|get_item:"key22"}}
    
    1. 在设置中注册自定义标记,添加库并单独保留其余的TEMPLATES。
    2. from django.template.defaulttags import register
      
      @register.filter
      def get_item(dictionary, key):
          return dictionary.get(key)
      
      1. 在您的模板中:
      2. TEMPLATES = [
            {
                ...   
                'OPTIONS': {
                    'context_processors': [   
                    ],
        
                    'libraries': {
                    'custom_tags':'YOURAPP.template_tags.custom_tags'
                    }
                },
            },
        ]
        

答案 1 :(得分:1)

通常在模板中迭代dict ......就像这样...

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

关于模板中嵌套的dict渲染,我认为这是在这里回答的

Django template in nested dictionary