跟随Django书籍学习遇Invalid block tag 'endblock'报错如何解决
Invalid block tag on line 8: 'endblock'. Did you forget to register or load this tag?
你提交的模板代码如下:
{% extends 'base.html' %} {% block title %}Home{% endblock title %} {% block content %} {% if user.is_authenticated %} Hi {{user.username}}! <p><a href="{% url 'logout' %}">Log Out</a></p> {% else %} <p>You are not logged in</p> <a href="{% url 'login' %}">Log In</a> | <a href="{% url 'signup' %}">Sign Up</a> {% endif %} {% endblock content %}
报错原因
- 最常见的原因是你的模板(包括继承的
base.html)中存在未正确闭合的块标签,比如某个{% block %}没有对应的{% endblock %},或者块标签拼写错误,比如误把{% endblock %}写成了{{ endblock }}使用了变量标记 - 当前模板中的
{% endblock %}后附加的块名和开头的{% block %}声明不匹配,比如开头写的是{% block content %},结尾不小心写错成{% endblock conten %}存在拼写偏差 - 模板文件中存在不可见的特殊字符、换行格式异常,导致Django模板引擎无法正常识别
endblock标签 - 继承的
base.html中存在模板语法错误,比如未闭合的标签、未加载就使用的自定义标签,错误传导到当前子模板触发报错
解决方法
- 首先核对当前运行的模板代码:你提交的示例代码的标签闭合、块名匹配都是规范的,优先确认你实际部署运行的模板是否存在拼写错误,比如
endblock是否漏写字母、块名是否和开头声明完全一致,有没有误用双大括号包裹endblock的情况 - 排查父模板
base.html:- 确认
base.html中已经正确定义了title、content两个块 - 检查
base.html中所有{% block %}标签都有对应的{% endblock %},没有遗漏、拼写错误 - 确认
base.html没有使用未提前通过{% load %}加载的自定义标签
- 确认
- 简化模板定位问题:临时把当前模板
block content内部的所有内容清空,只保留空块结构,测试是否还报错;如果不再报错就逐步把内容加回去,定位触发错误的具体代码行 - 如果是特殊字符导致的异常,把模板内容全选复制到纯文本编辑器中清除格式,再重新粘贴保存即可
内容的提问来源于stack exchange,提问作者Alex Idachaba
相关产品推荐
相关产品推荐

