当我不知道我将收到的结构时,如何循环遍历 Django 中的嵌套上下文字典
How do I loop through a nested context dictionary in Django when I have no idea the structure I will recieve
我有一本字典正在传递给一个看起来像这样的模板:
{'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'}}}
我需要它是一个如下所示的列表:
Key:
Value
Key:
Value
Value
Value
等等。
我能得到的最接近的是
{% for key, value in leasee.items %}
<p> {{key}} </p>
<ul>
{% for k2, v2 in value.items %}
<li> {{ k2 }} </li>
{% for k3, v3 in v2.items %}
<li>{{ k3 }}:{{ v3 }}</li>
{% endfor %}
{% endfor %}
</ul>
{% endfor %}
但只有一个值而不是其他字典作为值的键不会显示。我怎样才能使这项工作?
我只想在这里添加我的问题的答案,以防有人遇到这个问题。感谢 Animesh Sharma!
我必须创建一个模板标记来确定我正在循环的数据类型。看起来像这样。
from django import template
register = template.Library()
@register.filter
def data_type(value):
if type(value) is dict:
return 'dict'
很有魅力。
我建议您为此实施 custom template tag。
在此标签内,您可以根据数据的结构正确呈现数据。
您需要定义 returns 数据类型的自定义模板标签。
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 %}
我有一本字典正在传递给一个看起来像这样的模板:
{'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'}}}
我需要它是一个如下所示的列表:
Key:
Value
Key:
Value
Value
Value
等等。
我能得到的最接近的是
{% for key, value in leasee.items %}
<p> {{key}} </p>
<ul>
{% for k2, v2 in value.items %}
<li> {{ k2 }} </li>
{% for k3, v3 in v2.items %}
<li>{{ k3 }}:{{ v3 }}</li>
{% endfor %}
{% endfor %}
</ul>
{% endfor %}
但只有一个值而不是其他字典作为值的键不会显示。我怎样才能使这项工作?
我只想在这里添加我的问题的答案,以防有人遇到这个问题。感谢 Animesh Sharma!
我必须创建一个模板标记来确定我正在循环的数据类型。看起来像这样。
from django import template
register = template.Library()
@register.filter
def data_type(value):
if type(value) is dict:
return 'dict'
很有魅力。
我建议您为此实施 custom template tag。
在此标签内,您可以根据数据的结构正确呈现数据。
您需要定义 returns 数据类型的自定义模板标签。
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 %}