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

Ora*_*gft 13 django url

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

urlpatterns = [
    path('foo/',views.FooView,name='bar'),
]
Run Code Online (Sandbox Code Playgroud)

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

wim*_*wim 11

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

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

from django.urls import reverse
reverse('bar')
Run Code Online (Sandbox Code Playgroud)

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

  • 很有帮助,谢谢。所以基本上,它是一个可以用来代替硬编码 url 的变量? (6认同)
  • 是的,就是这样。 (2认同)

Wil*_*sem 5

假设您需要编写一个URL来引用您的FooView,那么您可以像这样写它

<a href="/foo/">link</a>
Run Code Online (Sandbox Code Playgroud)

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

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

因此,现在我们可以在{% url .. %}模板中改为使用template标签,例如:

<a href="{% url 'bar' %}">link</a>
Run Code Online (Sandbox Code Playgroud)

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

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

def redirect_view(request):
    return redirect('bar')
Run Code Online (Sandbox Code Playgroud)

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

如果URL包含参数,例如:

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

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

<a href="{% url 'bar' pk=2 %}">link</a>
Run Code Online (Sandbox Code Playgroud)

或在视图中:

def redirect_view(request):
    return redirect('bar', pk=2)
Run Code Online (Sandbox Code Playgroud)

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