首页 > 解决方案 > TemplateSyntaxError at / 第 57 行的块标记无效:'logout_url',预期为 'endif'。您是否忘记注册或加载此标签?

问题描述

我正在 Django 3.1.4 中构建一个应用程序。

我不明白为什么我会得到

TemplateSyntaxError at /
Invalid block tag on line 57: 'logout_url', expected 'endif'. Did you forget to register or load this tag?

突出显示这一行:

<a class="nav-link" href="{% logout_url %}">Logout</a>

这是我的代码,
在我的 urls.py 中:

urlpatterns = [
    path("logout/", LogoutView.as_view(), name="logout"),
]

在我的模板中:

{% url 'logout' as logout_url %}

      {% if not request.user.is_authenticated %}
      <li class="nav-item {% if request.path == login_url %}active{% endif %}">
        <a class="nav-link" href="{% url 'login' %}">Login</a>
      </li>
      <li class="nav-item {% if request.path == register_url %}active{% endif %}">
        <a class="nav-link" href="{% url 'register' %}">Register</a>
      </li>
      {% else %}

      <li class="nav-item {% if request.path == admin_url %}active{% endif %}">
        <a class="nav-link" href="{% url 'admin:index' %}">Admin</a>
      </li>

      <li class="nav-item {% if request.path == logout_url %}active{% endif %}"></li>
        <a class="nav-link" href="{% logout_url %}">Logout</a>
        <!-- logout_url -->
      </li>
      {% endif %}

如果我只是替换部分,它工作正常:

  <li class="nav-item {% if request.path == logout_url %}active{% endif %}"></li>
    <a class="nav-link" href="{% logout_url %}">Logout</a>
  </li>

和:

  <li class="nav-item {% if request.path == logout_url %}active{% endif %}"></li>
    <a class="nav-link" href="{% url 'logout' %}">Logout</a>
  </li>

但我不明白为什么...

就像线

{% url 'logout' as logout_url %}

根本不工作,
而且更多,django 期望{% endif %}.
那么这是否意味着代码在某个点发生故障并且无法读取{% endif %}标签?

谁能解释我发生了什么?

标签: djangodjango-templatesdjango-urls

解决方案


解决了

我正在使用 django 自定义“函数、循环、条件、ecc”。标记语法({% %})而不是 django 变量标记语法({{ }})。

我不得不替换

<a class="nav-link" href="{% logout_url %}">Logout</a>

和:

   <a class="nav-link" href="{{ logout_url }}">Logout</a>

推荐阅读