django.urls.path中的name参数的功能是什么?

时间:2018-08-19 23:35:38

标签: django url

在urls.py文件中创建路径时,通常会这样做:

urlpatterns = [
    path('foo/',views.FooView,name='bar'),
]

我是Django的初学者,但尚未在path函数中看到name参数的函数。此参数的作用是什么,如何在Django支持的网站内有效地使用它?简而言之,此参数的作用是什么,为什么在创建路径时包含它很重要?谢谢!

4 个答案:

答案 0 :(得分:5)

有时您想命名视图,以便您可以通过名称而不是url来引用它们。这样,如果您的应用程序中的url发生更改,则只需要在一个位置(urls.py模块)中更新代码。使用名称而不是经过硬编码的url的现有代码不需要更新。

例如,reverse实用程序函数接受该名称并返回url:

from django.urls import reverse
reverse('bar')

如果您不使用名称,则移动路线很麻烦-您需要在所有模板和代码中查找并更新网址。

答案 1 :(得分:3)

想象一下,您需要编写一个URL来引用您的FooView,然后您可以将其写为

<a href="/foo/">link</a>

但是,如果您以后改变主意,并希望对此视图使用qux/,则会出现问题。因此,重写URL可能会导致大量重写。如果URL包含参数,这也很麻烦。假设您有一个带有pktype参数的URL(例如foo/<pk>/qux/<type>),那么您需要记住格式,并因此想出格式,这很麻烦:“ /foo/1/qux/2还是/foo/2/qux/1 ?”。

所以我们不想直接写这些URL,我们想确定这些:基于一些标识符和零个或多个参数来计算URL。通过在路径中定义一个名称,我们首先需要定义这样的标识符,然后我们可以为该路径定义一个名称。

所以现在我们可以在模板中改用{% url .. %}模板标记,例如:

<a href="{% url 'bar' %}">link</a>

然后Django将进行数学运算,并将其替换为正确的URL。这不仅使我们省去了头痛,而且还保证了URL正确(当然,名称本身是正确的)。因此,如果它呈现HTML输出,则不必担心,我们可能会在其中一个URL中写错字了,因为{% url .. %}标记如果找不到名称会出现错误,或者参数不匹配。

例如,当我们想要重定向到页面时,我们可以做同样的事情。如果我们有一个重定向到bar的视图,则它看起来像:

def redirect_view(request):
    return redirect('bar')

再一次,我们完成了。如果以后URL发生更改,或者例如当有人要实现翻译后的 URL(例如,您可以用英语运行服务器,用俄语运行一个服务器),则这些URL将具有正确的翻译。< / p>

如果URL包含参数,例如:

urlpatterns = [
    path('foo/<int:pk>/edit',views.FooView,name='bar'),
]

我们也可以使用此参数。在模板中,它看起来像:

<a href="{% url 'bar' pk=2 %}">link</a>

或在视图中

def redirect_view(request):
    return redirect('bar', pk=2)

该参数如何适合URL,这不是我们的问题。 Django会自己发现的。

答案 2 :(得分:1)

以上答案并不适合我作为初学者。也许我可以用更多的外行话来解释它。

在urls文件中添加url路径并定义相应的视图函数以对其进行处理后,如果我们想通过其他地方的视图或html页面模板文件中的视图来访问相同的url,就像变量名一样,在代码中使用名称和名称空间来访问它。这很有帮助,因为定义另一个URL路径和/或使用直接链接会使代码更难以维护。

例如:

x=5

xi=x+1
xd=x-1
xf=x

比下面的更好,因为如果有一天您想将x更改为其他内容,那只是一次更改。

x=5

xi=6
xd=4
xf=5

关于如何使用它,您可以使用上面的答案或阅读django URL naming

答案 3 :(得分:0)

以上都是很好的答案,但我想尝试用更简单的方式来解释

我在民意调查应用中的 urls.py:

urlpatterns = [
    path('', views.index, name='index'),
    # /polls/5/
    # sends the values of question_id to the views
    path('<int:question_id>/', views.detail, name='detail'),
    # /polls/5/results
    path('<int:question_id>/results', views.results, name='results'),
    # /polls/5/vote
    path('<int:question_id>/vote', views.vote, name='vote'),   
] 

我的 index.html 的一小部分是:

    <a href="{% url 'index' %}">index</a>
    <a href="{% url 'detail' question_id=1 %}">detail</a>
    <a href="{% url 'results' question_id=1 %}">results</a>

在 index.html 中,这将索引详细信息结果显示为显而易见的链接,但请注意,在 <a> 标签中我使用了 Django 的 url 标签

Django 使用 url 标签的正确格式是:

{% url 'NAME OF URL here' any_variables_here %}

NAME OF URL 表示我们在 namepath() 参数中为 URL 命名的名称,这意味着我们只需要在 href 属性中使用 URL 的名称,我们现在不必在我们的代码中到处使用忙碌而复杂的 url,这是 Django 的一个很棒的特性。

最重要的优势是,如果我们在 urls.py 中更改我们的 URL,例如: <int:question_id>/vote<int:question_id>/funny_poll/vote 那么现在您无需担心更改之前使用过的每个文件中的 url。

这非常棒,Django 开发人员应该使用此功能。

快乐编码?