Jinja模板如何访问列表元素?修复Django模板len()函数解析报错
错误原因
Django 模板语法不支持直接调用 Python 原生函数,你代码中使用的len(totalDBElement)不符合模板语法规则,因此会抛出解析错误。此外你原模板的写法会把分类名称和对应数值拆分为两个独立的<h2>标签,也不符合你预期的展示效果。
修复方案
推荐优先在视图层做数据预处理,符合Django「模板尽量减少逻辑处理」的最佳实践,修改成本也最低:
- 修改
views.py代码,将两个列表打包为一一对应的元组列表后再传给模板:
def index(request): totalDBElement = [169, 2166, 5413, 635, 635] elementOrder = ['Rules', 'Questions', 'ParentChild', 'ChildList'] # 打包两个列表,自动按较短的列表长度匹配,刚好对应你需要的4组展示数据 page_data = zip(elementOrder, totalDBElement) return render(request,'diagnosis/index.html', {'page_data': page_data})
- 修改模板代码,直接遍历打包后的结构化数据即可:
{% for item_name, item_count in page_data %} <h2>{{ item_name }}: {{ item_count }}</h2> {% endfor %}
如果你不想修改视图代码,也可以通过Django模板内置的过滤器实现遍历,不过代码可读性会稍差:
{% for item in elementOrder %} <h2>{{ item }}: {{ totalDBElement|slice:forloop.counter0|last }}</h2> {% endfor %}
内容的提问来源于stack exchange,提问作者Kanchon Gharami
相关产品推荐
相关产品推荐

