Flask中Jinja2遍历嵌套结构触发模板语法报错的解决方法
嵌套字典列表的正确遍历方案
针对你给出的data结构,可直接使用以下写法完成嵌套遍历,输出内层字典的值:
兼容写法(推荐优先使用)
使用Jinja内置的items过滤器遍历字典键值对,规避不同版本的语法兼容问题:
{% for week_name, item_list in data|items %} {# 外层遍历拿到星期名称与对应的字典列表 #} <h4>{{ week_name }}</h4> {# 内层遍历拿到列表中的单个字典 #} {% for day_item in item_list %} <p>{{ day_item.key }}</p> {% endfor %} {% endfor %}
原生属性写法
如果当前环境支持直接访问字典方法,也可以使用以下写法:
{% for week_name, item_list in data.items %} <h4>{{ week_name }}</h4> {% for day_item in item_list %} <p>{{ day_item.key }}</p> {% endfor %} {% endfor %}
注意:Jinja2中访问方法不需要额外加括号,禁止写
data.items(),老版本Jinja会直接解析报错。
报错原因排查
你遇到的Unexpected end of template报错,可按以下优先级排查:
- 检查for标签内的变量分隔逗号是否为英文半角逗号:误写为中文逗号会导致Jinja解析for参数失败,抛出无明确指向的endfor找不到错误。
- 检查所有模板标签的闭合格式:确保所有
{%与%}一一对应,避免漏写大括号、百分号导致标签无法识别,比如把{% endfor %}误写为{% endfor }。 - 确认没有多余的括号:所有调用方法的位置不要加
(),尤其是items的写法。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

