You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>

关键修正点

  1. 调整if/elif结构:将内部嵌套if的{% endif %}与外层的{% elif %}分开换行,确保外层if在elif之前未被闭合,修复标签匹配问题。
  2. 优化条件逻辑:
    • 把重复的not user.is_authenticated提取到elif最前面,简化冗余的条件表达式。
    • 用括号明确and/or的逻辑优先级,避免出现意料之外的判断结果。
  3. 可选优化:路径判断更可靠:推荐使用request.resolver_match.url_name判断当前视图名称,比直接匹配request.path更稳定,比如:
    {% if request.resolver_match.url_name in 'home,contact,login,signup' %}
    

内容的提问来源于stack exchange,提问作者hans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:27:35