当我不知道我将收到的结构时,如何在Django中循环嵌套的上下文字典

时间:2015-06-15 18:49:27

标签: django django-templates django-views

我有一个字典,我传递给一个看起来像这样的模板:

HUE

我需要它是一个看起来像的列表:

0000000:    0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a   ................
0000010:    0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a   ................
0000020:    0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a   ................

等等。

我能得到的最接近的是

{'leasee': {'respond': {'hour': True, 'day': True}, 'contact': {'phone': True, 'facebook': True, 'email': True, 'other': True, 'text': True}, 'licence': '987654321', 'help': {'beautySupplyProvider': True, 'photographer': True}, 'phoneNumber': '12345678910', 'name': 'Chris', 'certifications': {'yes': True, 'long': 'All of them'}, 'profession': {'massageTherapist': True, 'nailTechnician': True, 'barber': True}, 'amenities': {'receptionist': True, 'retailDisplayShelfSpace': True, 'long': 'some words', 'other': True, 'highTrafic': True}, 'email': 'chris@internet.com', 'circleData': '(45.5144493,-122.6710338) 400', 'compare': {'uniqueVsChic': '1', 'teamVsSolo': '1', 'familyVsUpscale': '8'}}}

但是只有一个值而不是其他字典作为值的键不显示。我怎样才能做到这一点?

我只是想在这里添加我的问题的答案,万一有人遇到这个问题。感谢Animesh Sharma!

我必须创建一个模板标记,用于确定我循环的数据类型。它看起来像这样。

Key:
    Value
Key:
    Value
    Value
    Value

像魅力一样。

2 个答案:

答案 0 :(得分:2)

您需要定义一个返回数据类型的自定义模板标记。

from django import template

register = template.Library()

@register.filter
def data_type(value):
    return type(value)

然后在模板中使用它,如下所示:

{% for key, value in leasee.items %}
    <p> {{key}} </p>
    <ul>
    {%if value|data_type == 'dict' %}
    {% for k2, v2 in value.items %}
        <li> {{ k2 }} </li>
        {%if v2|data_type == 'dict'%}
        {% for k3, v3 in v2.items %}
            <li>{{ k3 }}:{{ v3 }}</li>
            {% endfor %}
    {%else%}
    <li>{{v2}}</li>
    {%endif%}

{% endfor %}
{%else%}
<li>{{value}}</li>
{%endif%}
    </ul>

{% endfor %}

答案 1 :(得分:1)

我建议您为此实施custom template tag

在此标记内,您可以根据其结构正确呈现数据。