小编典典

什么是反向()?

all

当我有时阅读 Django 代码时,我会在一些模板中看到reverse()。我不太确定这是什么,但它与 HttpResponseRedirect
一起使用。reverse()这应该如何以及何时使用?


阅读 115

收藏
2022-04-27

共1个答案

小编典典

reverse()| Django
文档


让我们假设在您urls.py的定义中:

url(r'^foo$', some_view, name='url_name'),

然后,您可以在模板中将此 url 引用为:

<!-- django <= 1.4 -->
<a href="{% url url_name %}">link which calls some_view</a>

<!-- django >= 1.5 or with {% load url from future %} in your template -->
<a href="{% url 'url_name' %}">link which calls some_view</a>

这将呈现为:

<a href="/foo/">link which calls some_view</a>

现在说您想在您的中做类似的事情views.py- 例如,您正在处理其他一些 URL(not /foo/)在其他一些视图(not
some_view)中,并且您希望将用户重定向到/foo/(通常是成功提交表单的情况)。

你可以这样做:

return HttpResponseRedirect('/foo/')

但是,如果您将来想更改 URL 怎么办?您必须在代码中更新您urls.py
所有对它的引用。这违反了DRY(不要重复自己)原则和仅在一个地方进行编辑的整个想法——这是值得努力的事情。

相反,你可以说:

from django.urls import reverse
return HttpResponseRedirect(reverse('url_name'))

这会在您的项目中定义的所有 URL 中查找使用名称定义的 URL,url_name并返回实际的 URL /foo/

这意味着您仅通过其name属性来引用 URL - 如果您想更改 URL 本身或它所引用的视图,您可以通过仅编辑一个位置来执行此操作 -
urls.py

2022-04-27