首页 > 解决方案 > 我怎么知道何时以及何时不在 django url 标签中包含“app_name:”

问题描述

我正在按照一本书的说明编写我的第一个 django 程序。这本书写了像{% url 'learning_logs:index' %}(learning_logs 是应用程序名称)这样的 url 标签,但是当我试图模仿它时,我得到了一个错误,直到我{% url 'index' %}在这里阅读了一篇文章后才同意。后来在我的程序中,我在同一个项目上创建了另一个名为“用户”的应用程序后,我收到了错误Reverse for '' not found. '' is not a valid view function or pattern name,直到我恢复到书中使用的初始方法,在页面名称之前添加了“learning_logs:” {% url 'learning_logs:index' %}。关于如何识别何时添加“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 %}

标签: django

解决方案


urls.py函数 include(用于包含应用程序的新 urls.py)中具有namespace定义应用程序 url 命名空间的 kwarg,这就是您要查找的内容。这样做的主要原因是不要在应用程序之间碰撞太常见的 URL,如“列表”或“创建”。因此,如果您不定义命名空间,则可以只使用 url 的名称而不使用namespace:之前的名称。

此处的文档:https ://docs.djangoproject.com/en/3.0/topics/http/urls/#url-namespaces

希望你能理解。


推荐阅读