我不知道何时在 django.core.urlresolvers 模块中使用 reverse()
Posted
技术标签:
【中文标题】我不知道何时在 django.core.urlresolvers 模块中使用 reverse()【英文标题】:I don't know when to use reverse() in django.core.urlresolvers module 【发布时间】:2013-01-05 08:49:59 【问题描述】:我读完了 Django URL 调度器的reverse()
方法的documentation。
什么时候有用?
谢谢!
【问题讨论】:
用例:用户提交表单。处理表格;创建一个对象并将其添加到您的数据库中。您希望通过返回已创建对象的详细视图来响应。例如,这可以通过return reverse(myDetailView, kwargs='pk':self.object.pk)
来完成。
【参考方案1】:
该函数支持dry principle - 确保您不会在整个应用程序中对网址进行硬编码。一个 url 应该在一个地方定义,而且只有一个地方 - 你的url conf。之后,您实际上只是在引用该信息。
使用reverse()
给你一个页面的url,给定视图的路径,或者你的url conf 中的page_name
参数。如果在模板中使用 % url 'my-page' %
执行此操作没有意义,则可以使用它。
您可以在很多地方使用此功能。我发现我使用它的一个地方是在视图中重定向用户时(通常在成功 processing of a form 之后)-
return HttpResponseRedirect(reverse('thanks-we-got-your-form-page'))
您也可以在编写模板标签时使用它。
我使用reverse()
的另一次是模型继承。我在父模型上有一个ListView
,但想从这些父对象中的任何一个获取它的关联子对象的DetailView
。我将一个get__child_url()
函数附加到父级,该函数识别出一个孩子的存在并使用reverse()
返回它的网址DetailView
。
【讨论】:
【参考方案2】:django 中使用 reverse() 函数在您的视图中实现符合 DRY 的 url。 找到更清晰的解释here
【讨论】:
最好引用该站点的解释,然后引用它们作为来源,这样即使该站点出现故障,您的答案也可以在 SO 上完全可用。【参考方案3】:当您想通过名称解析视图以及代码中 URL 的参数时使用它。这是% url %
template tag 的后端。
【讨论】:
你能再解释一下吗? 真的没有什么好解释的了。您会知道何时需要它。以上是关于我不知道何时在 django.core.urlresolvers 模块中使用 reverse()的主要内容,如果未能解决你的问题,请参考以下文章
如何知道所有 Promise 何时在动态“可迭代”参数中得到解决?