django - 我怎么知道何时以及何时不在 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 %}
解决方案
在urls.py
函数 include(用于包含应用程序的新 urls.py)中具有namespace
定义应用程序 url 命名空间的 kwarg,这就是您要查找的内容。这样做的主要原因是不要在应用程序之间碰撞太常见的 URL,如“列表”或“创建”。因此,如果您不定义命名空间,则可以只使用 url 的名称而不使用namespace:
之前的名称。
此处的文档:https ://docs.djangoproject.com/en/3.0/topics/http/urls/#url-namespaces
希望你能理解。
推荐阅读
- regex - 多个电子邮件 ID 的正则表达式中的灾难性回溯
- javascript - 谷歌地图初始化在 safari 浏览器的浏览器历史堆栈中推送一条空路线
- django - 带有外键和双下划线的 Django 模型操作
- python - pool.map 中“chunksize”的作用是什么?
- php - 如何从数据库中的时间戳字段过滤php中的日期月份和年份
- asp.net-mvc - ASP.NET MVC SelectList 在创建时不选择值
- java - 如何在空手道 DSL 功能文件中验证 OAuth 1.0 密钥和令牌?
- java - 使用 Jackson 反序列化(在未知属性上失败)不会忽略鉴别器属性(使用 SwaggerCodegen 创建的 DTO)
- php - PHP删除具有特定键重复值的关联数组的数组
- google-drive-api - '已超过未经授权使用的每日限制。继续使用需要注册。单个文件下载后