Django模板报Invalid block tag 'endif'错误,如何实现书名后自动加逗号
报错原因
Django模板语法不允许标签拆分到多行,你的代码中{% if not forloop.last %}被拆为了两行,模板解析器无法识别到完整的if标签,读到后续{% endif %}时找不到匹配的if声明,就会抛出该错误。
修复方案
方案1:修正换行问题
将if标签的完整内容放在同一行即可,修改后的模板代码如下:
author_list.html
{% extends "base_generic.html" %} {% block content %} <h1>All authors</h1> <ul> {% for author in author_list %} <li> <a href="">{{ author.last_name }}:</a> {% for book in author.book_set.all %} {{ book.title }}{% if not forloop.last %}, {% endif %} {% endfor %} </li> {% endfor %} </ul> {% endblock %}
方案2:用内置过滤器简化实现
你需要的书名间追加逗号的效果,可以直接用Django自带的join过滤器实现,无需手动写循环判断,代码更简洁:
{% extends "base_generic.html" %} {% block content %} <h1>All authors</h1> <ul> {% for author in author_list %} <li> <a href="">{{ author.last_name }}:</a> {{ author.book_set.all.values_list('title', flat=True)|join:", " }} </li> {% endfor %} </ul> {% endblock %}
内容的提问来源于stack exchange,提问作者Ruslan
相关产品推荐
相关产品推荐

