如何修复Jinja2模板嵌套错误?endfor标签语法报错排查
Jinja2模板语法错误排查与修复
错误信息
File "templates/admin.html", line 187, in template {% endfor %} jinja2.exceptions.TemplateSyntaxError: Encountered unknown tag 'endfor'. You probably made a nesting mistake. Jinja is expecting this tag, but currently looking for 'elif' or 'else' or 'endif'. The innermost block that needs to be closed is 'if'.
问题模板代码
{% for fd in foods %} <div class="list__item"> <span>{{ fd.food_name }}</span> <div class="switch-btn"></div> </div> {% endfor %} </div> <div class="order__container"> {% for order in orders %} {% if order.ready_status|string() == new_order|string() %} <div class="order__item orange"> <span class="order__num">Заказ № {{ order.id }}</span> <span class="order__elem">{{ order.food.food_name }}-{{ order.food_counter }}</span> <span class="order__sum">Итог {{ order.total_price }}</span> </div> {% if order.ready_status|string() == adopted|string() %} <div class="order__item green"> <span class="order__num">Заказ № {{ order.id }}</span> <span class="order__elem">{{ order.food.food_name }}-{{ order.food_counter }}</span> <span class="order__sum">Итог {{ order.total_price }}</span> </div> {% else %} <div class="order__item blue"> <span class="order__num">Заказ № {{ order.id }}</span> <span class="order__elem">{{ order.food.food_name }}-{{ order.food_counter }}</span> <span class="order__sum">Итог {{ order.total_price }}</span> </div> {% endif %} {% endfor %} </div> </div>
错误原因
模板中if标签的嵌套逻辑存在错误:第二个条件判断使用了独立的{% if %}标签,而非{% elif %},导致第一个if块始终未被闭合。Jinja2解析器在处理到{% endfor %}时,仍在等待闭合第一个if块,因此抛出语法错误。
修复方案
将第二个{% if %}替换为{% elif %},确保整个条件判断是一个完整的块结构:
{% for fd in foods %} <div class="list__item"> <span>{{ fd.food_name }}</span> <div class="switch-btn"></div> </div> {% endfor %} </div> <div class="order__container"> {% for order in orders %} {% if order.ready_status|string() == new_order|string() %} <div class="order__item orange"> <span class="order__num">Заказ № {{ order.id }}</span> <span class="order__elem">{{ order.food.food_name }}-{{ order.food_counter }}</span> <span class="order__sum">Итог {{ order.total_price }}</span> </div> {% elif order.ready_status|string() == adopted|string() %} <div class="order__item green"> <span class="order__num">Заказ № {{ order.id }}</span> <span class="order__elem">{{ order.food.food_name }}-{{ order.food_counter }}</span> <span class="order__sum">Итог {{ order.total_price }}</span> </div> {% else %} <div class="order__item blue"> <span class="order__num">Заказ № {{ order.id }}</span> <span class="order__elem">{{ order.food.food_name }}-{{ order.food_counter }}</span> <span class="order__sum">Итог {{ order.total_price }}</span> </div> {% endif %} {% endfor %} </div> </div>
内容的提问来源于stack exchange,提问作者Axel
相关产品推荐
相关产品推荐

