在Django模板系统中,当处理包含字典的列表时,可以通过点符号(.)或方括号([])来访问字典中的键值。模板语言提供了几种方式来访问嵌套数据结构。
这是最常用的方式,适用于已知键名的情况:
{% for item in list_of_dicts %}
{{ item.key_name }}
{% endfor %}
当键名包含特殊字符或需要动态获取键名时使用:
{% for item in list_of_dicts %}
{{ item.key_name }} <!-- 等同于 -->
{{ item|get_item:"key_name" }}
{% endfor %}
如果需要更灵活地访问字典键,可以创建自定义过滤器:
your_app/templatetags/custom_filters.py
中:from django import template
register = template.Library()
@register.filter
def get_item(dictionary, key):
return dictionary.get(key)
{% load custom_filters %}
{% for item in list_of_dicts %}
{{ item|get_item:"dynamic_key" }}
{% endfor %}
对于嵌套字典结构,可以使用点符号链式访问:
{% for item in list_of_dicts %}
{{ item.outer_key.inner_key }}
{% endfor %}
原因:模板默认会抛出异常当访问不存在的键
解决方案:
default
过滤器:default
过滤器:get
方法(通过自定义过滤器)解决方案:
get_item
过滤器解决方案:
{{ list_of_dicts.0.key_name }} <!-- 访问第一个字典的key_name -->
视图代码:
def my_view(request):
data = [
{'name': 'Alice', 'age': 25, 'address': {'city': 'NY', 'zip': '10001'}},
{'name': 'Bob', 'age': 30, 'address': {'city': 'LA', 'zip': '90001'}}
]
return render(request, 'template.html', {'people': data})
模板代码:
<ul>
{% for person in people %}
<li>
{{ person.name }}, {{ person.age }}岁,
居住在{{ person.address.city }}(邮编:{{ person.address.zip }})
</li>
{% endfor %}
</ul>
<!-- 访问特定索引 -->
<p>第一人姓名: {{ people.0.name }}</p>
default
过滤器处理可能缺失的键通过以上方法,可以灵活地在Django模板中处理包含字典的列表数据。
没有搜到相关的文章