当我有时阅读 Django 代码时,我会在一些模板中看到reverse()。我不太确定这是什么,但它与 HttpResponseRedirect 一起使用。reverse()这应该如何以及何时使用?
reverse()
reverse()| Django 文档
让我们假设在您urls.py的定义中:
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/(通常是成功提交表单的情况)。
views.py
/foo/
some_view
你可以这样做:
return HttpResponseRedirect('/foo/')
但是,如果您将来想更改 URL 怎么办?您必须在代码中更新您urls.py 和 所有对它的引用。这违反了DRY(不要重复自己)原则和仅在一个地方进行编辑的整个想法——这是值得努力的事情。
相反,你可以说:
from django.urls import reverse return HttpResponseRedirect(reverse('url_name'))
这会在您的项目中定义的所有 URL 中查找使用名称定义的 URL,url_name并返回实际的 URL /foo/。
url_name
这意味着您仅通过其name属性来引用 URL - 如果您想更改 URL 本身或它所引用的视图,您可以通过仅编辑一个位置来执行此操作 - urls.py。
name