gpt4 book ai didi

django - 什么是反向()?

转载 作者:行者123 更新时间:2023-11-28 19:32:16 26 4
gpt4 key购买 nike

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

最佳答案

reverse() | Django documentation


假设您在 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 中做类似的事情 - 例如您正在其他 View (不是 some_view)中处理其他一些 URL(不是 /foo/)并且您希望将用户重定向到 /foo/(通常是成功提交表单的情况)。

你可以这样做:

return HttpResponseRedirect('/foo/')

但是如果您以后想更改 URL 怎么办?您必须更新您的 urls.py 您代码中对它的所有引用。这违反了 DRY (Don't Repeat Yourself)只在一个地方编辑的原则和整个想法 - 这是值得努力的事情。

相反,你可以说:

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

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

这意味着您仅通过其 name 属性引用 URL - 如果您想更改 URL 本身或它所引用的 View ,您可以通过仅编辑一个地方来实现 - urls.py.

关于django - 什么是反向()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11241668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com