2024-03-23 07:00:03

什么是reverse()?

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


当前回答

reverse()用于坚持django的DRY原则,即如果你在未来改变url,那么你可以使用reverse(urlname)引用该url。

其他回答

reverse()用于坚持django的DRY原则,即如果你在未来改变url,那么你可以使用reverse(urlname)引用该url。

这是一个老问题,但这里有一些东西可能会帮助到一些人。

官方文件显示:

Django提供了用于执行URL反转的工具 需要url的不同层:模板中:使用url 模板标签。在Python代码中:使用reverse()函数。在高等 与Django模型实例的url处理相关的级别代码 get_absolute_url()方法。

如。在模板中(url标签)

<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>

如。在python代码中(使用reverse函数)

return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))

现有的答案非常清楚。以防你不知道为什么它被称为反向:它接受一个url名称的输入,并给出实际的url,这是反向的,首先有一个url,然后给它一个名字。

该函数支持干原则-确保你不硬编码url在你的应用程序。一个url应该定义在一个地方,只有一个地方-你的url配置。之后,你真的只是引用该信息。

使用reverse()来给你一个页面的url,给定视图的路径,或者url conf中的page_name参数。你可以在模板中使用{% url 'my-page' %}没有意义的情况下使用它。

有很多地方可以使用这个功能。我发现我使用它的一个地方是在视图中重定向用户时(通常是在成功处理表单之后)

返回HttpResponseRedirect(反向(thanks-we-got-your-form-page))

您也可以在编写模板标记时使用它。

另一次我使用reverse()是模型继承。我有一个父模型上的ListView,但想从这些父对象中的任何一个到它的相关子对象的DetailView。我附加了一个get__child_url()函数到父对象,该函数标识子对象的存在,并使用reverse()返回其DetailView的url。

有个医生可以解决这个问题

https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-resolution-of-urls

它可以用来为给定的视图生成URL

主要的优点是您不必在代码中硬编码路由。