Django模板报错:Invalid block tag : 'endif' 问题求助
问题排查与解决办法
核心错误原因
你的模板代码存在if/elif语法结构不匹配的问题:
- 外层的
{% if ... %}还未闭合,就先闭合了内部嵌套的{% if not user.is_authenticated %},紧接着直接写{% elif ... %},这会让Django误认为外层if已经结束,导致后续的elif和最后一个endif无法正确匹配,从而触发"Invalid block tag : 'endif'"错误。 - 另外,你对
request.path的判断存在逻辑冗余,且部分路径写法错误(比如request.path == 'home',实际request.path是带斜杠的完整路径,比如/home/)。
修正后的代码
<nav id="navbar" class="navbar"> <ul> {% if request.path == '/' or 'home' in request.path or 'contact' in request.path or 'login' in request.path or 'signup' in request.path %} <li> <a class="nav-link scrollto active" href="{% url 'home' %}">Home</a> </li> <li> <a class="nav-link scrollto" href="{% url 'home' %}#about">About</a> </li> <li> <a class="nav-link scrollto" href="{% url 'home' %}#services">Services</a> </li> <li><a href="{% url 'home' %}#blog">Blog</a></li> <li> <a class="nav-link scrollto" href="{% url 'home' %}#contact">Contact</a> </li> {% if not user.is_authenticated %} <li> <a class="getstarted scrollto" href="{% url 'account_signup' %}">Get Started</a> </li> {% else %} <li></li> {% endif %} {% elif not user.is_authenticated and (request.path == '/' or 'home' in request.path or 'contact' in request.path) %} <li> <a class="nav-link scrollto active" href="{% url 'home' %}">Home</a> </li> <li> <a class="nav-link scrollto" href="{% url 'home' %}#about">About</a> </li> <li> <a class="nav-link scrollto" href="{% url 'home' %}#services">Services</a> </li> <li><a href="{% url 'home' %}#blog">Blog</a></li> <li> <a class="nav-link scrollto" href="{% url 'home' %}#contact">Contact</a> </li> <li> <a class="getstarted scrollto" href="{% url 'home' %}#about">Get Started</a> </li> {% endif %} </ul> <i class="bi bi-list mobile-nav-toggle"></i> </nav>
关键修正点
- 调整if/elif结构:将内部嵌套
if的{% endif %}与外层的{% elif %}分开换行,确保外层if在elif之前未被闭合,修复标签匹配问题。 - 优化条件逻辑:
- 把重复的
not user.is_authenticated提取到elif最前面,简化冗余的条件表达式。 - 用括号明确
and/or的逻辑优先级,避免出现意料之外的判断结果。
- 把重复的
- 可选优化:路径判断更可靠:推荐使用
request.resolver_match.url_name判断当前视图名称,比直接匹配request.path更稳定,比如:{% if request.resolver_match.url_name in 'home,contact,login,signup' %}
内容的提问来源于stack exchange,提问作者hans
相关产品推荐
相关产品推荐

