Django模板语法错误:'bootstrap_icon'标签无效,求解决方案
首先先把你的错误信息整理出来,方便快速定位问题:
TemplateSyntaxError at /myrestaurants/restaurants/1/
无效的块标签:'bootstrap_icon',预期为'elif'、'else'或'endif'
请求方法:GET
请求URL:http://127.0.0.1:8000/myrestaurants/restaurants/1/
Django版本:1.8.7
异常类型:TemplateSyntaxError
异常值:Invalid block tag: 'bootstrap_icon', expected 'elif', 'else' or 'endif'
异常位置:/usr/lib/python2.7/dist-packages/django/template/base.py in invalid_block_tag, line 395
Python可执行文件:/usr/bin/python
Python版本:2.7.12
Python路径:['/home/vaibhav/Desktop/projects/myrecommendations', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/...']
这个错误的核心是Django模板引擎不认识bootstrap_icon标签,同时报错提示它出现在{% if %}块的上下文里,预期是条件分支相关标签,你可以从以下两个方向排查解决:
1. 确保bootstrap_icon模板标签已正确加载和注册
如果
bootstrap_icon是第三方库提供的:- 先确认已安装适配Django 1.8的对应包(比如早期的
django-bootstrap-icons兼容版本,用pip install django-bootstrap-icons==适配版本安装) - 在项目
settings.py的INSTALLED_APPS列表中添加该库的app名称(比如bootstrap_icons) - 在使用该标签的模板文件顶部,添加
{% load bootstrap_icons %}(注意标签库名称要和实际包一致)
- 先确认已安装适配Django 1.8的对应包(比如早期的
如果是你自定义的模板标签:
- 确保目标app目录下有
templatetags文件夹,里面包含__init__.py和定义标签的py文件(比如icon_tags.py) - 在自定义标签文件中用
@register.simple_tag装饰器正确注册bootstrap_icon标签 - 在模板顶部添加
{% load icon_tags %}加载自定义标签
- 确保目标app目录下有
2. 检查模板中bootstrap_icon的使用位置和语法
报错提示预期是elif/else/endif,说明这个标签可能出现在{% if %}块的错误位置,比如:
- 你可能在
{% if some_condition %}之后直接写了{% bootstrap_icon ... %}但语法格式有误 - 或者
{% if %}块没有正确闭合,导致Django把bootstrap_icon当成了条件分支的一部分
举个错误写法的例子:
{% if user.is_authenticated %} {% bootstrap_icon "user" %} {% 这里漏写了endif或者存在语法错误 %}
正确的写法要保证{% if %}块结构完整,且bootstrap_icon标签位置合理:
{% load bootstrap_icons %} {% if user.is_authenticated %} <span>{% bootstrap_icon "user" %}</span> {% else %} <span>{% bootstrap_icon "lock" %}</span> {% endif %}
另外还要确认bootstrap_icon标签的语法是否正确,比如是否需要传递参数,是否为单标签无需闭合(大多数图标类标签都是单标签)。
内容的提问来源于stack exchange,提问作者Vaibhav Goyal

