我正在按照一本书中的说明编写我的第一个 django 程序。这本书写了像{% url 'learning_logs:index' %}
这样的url标签(learning_logs是应用程序名称(,但是当我试图模仿它时,我得到了一个错误,直到我在这里阅读了一篇文章后才{% url 'index' %}
。后来在我的程序中,在我在同一项目上创建了另一个名为"users"的应用程序后,我得到了错误Reverse for '' not found. '' is not a valid view function or pattern name
,直到我恢复到书中使用的初始方法,在页面名称{% url 'learning_logs:index' %}
之前添加"learning_logs:"。我需要一些关于如何识别何时添加"name_of_the_app:"以及何时不将其添加到 url 标签中的帮助。
下面是一些包含"learning_logs:"的代码示例:
<h1>
<a href="{% url 'learning_logs:index' %}">Learning Log</a> -
<a href="{% url 'learning_logs:topics' %}">Topics</a> -
{% if user.is_authenticated %}
Hello, {{ user.username }}
{% else %}
<a href="{% url 'users:login' %}">log in</a>
{% endif %}
</h1>
{% block content %}{% endblock content %}
这是我只用 url 名称编写它的方式,有时也有效(这是在我创建新应用程序"用户"之前:
<h1>
<a href="{% url 'index' %}">Learning Log</a> -
<a href="{% url 'topics' %}">Topics</a> -
</h1>
{% block content %}{% endblock content %}
在函数 include(用于包含应用程序的新 urls.py(urls.py
中具有定义应用程序 URL 命名空间的 kwargnamespace
,这就是您正在寻找的。这样做的主要原因是不要在应用程序之间发生太常见的URL,例如"列表"或"创建"。因此,如果您不定义命名空间,则可以只使用 url 的名称,而无需之前namespace:
。
文档在这里: https://docs.djangoproject.com/en/3.0/topics/http/urls/#url-namespaces
希望你能理解。