django.urls.path中name参数的函数是什么



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

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

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

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

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

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

如果你不使用这个名称,那么移动路由是很麻烦的——你需要在所有模板和代码中找到并更新url。

想象一下,您需要编写一个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将具有正确的翻译。

如果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自己会发现的。

作为一个初学者,以上答案并不适合我。也许我可以用更通俗的术语来解释。

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

例如:

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

比下面的要好,因为如果你想在某一天将x更改为其他内容,只需一次更改。

x=5
xi=6
xd=4
xf=5

至于如何使用,您可以使用上面的答案或阅读djangoURL命名。

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

我的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是指我们在path()name参数中为URL命名的名称,这意味着我们只需要在href属性中使用URL的名称,我们现在不必在代码中到处使用繁忙而复杂的URL,这是Django的一个很棒的功能。

最重要的优点是,如果我们在urls.py中更改URL,比如:<int:question_id>/vote<int:question_id>/funny_poll/vote,那么现在您不需要担心更改每个文件中的url,无论您以前在哪里使用它。

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

HaPpY编码🤗

最新更新