什么是reverse()?

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

reverse()| Django文档


假设您在url.py中定义了以下内容:

url(r'^foo$',一些视图,name='url\u name'),

在模板中,您可以将此url称为:

<!——django<=1.4-->
<a href="{%url url_name%}&quot&燃气轮机;调用某些视图的链接&lt/a>
<!--django>=1.5或在模板中使用{%loadurl from future%}-->
<a href="{%url'url\u名称'%}&quot&燃气轮机;调用某些视图的链接&lt/a>

这将呈现为:

<a href=&quot/foo/quot&燃气轮机;调用某些视图的链接&lt/a>

现在,假设您希望在视图.py中执行类似的操作-例如,您正在处理其他视图(而不是某些视图)中的其他URL(而不是/foo/),并且您希望将用户重定向到/foo/(通常是在成功提交表单时)

你可以这样做:

返回HttpResponseRedirect(“/foo/”)

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

相反,你可以说:

从django.url反向导入


返回HttpResponseRedirect(反向('url\u name'))

这将查看项目中定义的所有URL,查找使用名称URL\u name定义的URL,并返回实际URL/foo/

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

发表评论