【问题标题】:I don't know when to use reverse() in django.core.urlresolvers module我不知道何时在 django.core.urlresolvers 模块中使用 reverse()
【发布时间】:2013-01-05 08:49:59
【问题描述】:

我读完了 Django URL 调度器的reverse() 方法的documentation

什么时候有用?

谢谢!

【问题讨论】:

  • 用例:用户提交表单。处理表格;创建一个对象并将其添加到您的数据库中。您希望通过返回已创建对象的详细视图来响应。例如,这可以通过return reverse(myDetailView, kwargs={'pk':self.object.pk}) 来完成。

标签: django django-urls


【解决方案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 的后端。

    【讨论】:

    • 你能再解释一下吗?
    • 真的没有什么好解释的了。您会知道何时需要它。
    猜你喜欢
    • 1970-01-01
    • 2011-06-27
    • 2017-08-25
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 2018-04-29
    • 2011-07-10
    相关资源
    最近更新 更多