Django中的反向()是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

有时,当我阅读Django代码时,我会在一些模板中看到reverse()...。我不太清楚这是什么,但是它与HttpResponseRedirective一起使用。这是怎么发生的,什么时候发生的?reverse()应该被利用吗?

如果有人能给出一些例子来回答的话,那就太好了。

提问于
用户回答回答于

在你的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-例如,你正在处理其他网址(不是/foo/)在其他方面(不是some_view),希望将用户重定向到/foo/(通常是中选提交表格的情况)

你可以直接

return HttpResponseRedirect('/foo/')

但是,如果你想在将来更改url-你必须更新你的urls.py代码中对它的所有引用。

相反,你可以说

from django.core.urlresolvers import reverse
return HttpResponseRedirect(reverse('url_name'))

这将查看项目中定义的所有URL,以查找用名称定义的url。url_name并返回实际的url。/foo/...

这意味着只通过它的name属性-如果想更改url本身或它引用的视图,可以只编辑一个地方-urls.py...。整个编辑一个地方的想法被称为“不要重复你自己”,这是值得努力的东西。

扫码关注云+社区