【问题标题】:Why is the permalink decorator no longer recommended in django?为什么在 django 中不再推荐使用永久链接装饰器?
【发布时间】:2013-04-13 13:11:30
【问题描述】:

我正在阅读 django 开发文档。 Here 表示不再推荐使用永久链接装饰器,请在 get_absolute_url 方法中使用 reverse 生成模型实例的完整 url(向上滚动一点并查看警告框)。

我认为每次需要时都必须使用 reverse 是违反 DRY 的。那么使用永久链接有什么问题呢?为什么不再推荐?

【问题讨论】:

    标签: django django-models decorator permalinks


    【解决方案1】:

    在当前版本的 django 中,装饰器实际上调用了文档推荐的 reverse 函数。原因似乎是现在我们有了reverse(),就不需要装饰器了。使用reverse 看起来确实比返回名称、元组和字典更好。相反,您使用 args 和 kwargs - 惯用的 python。

    还有this is the ticket 讨论了为了 API 纯度而弃用装饰器。他们没有发出警告并让用户更新代码库,而是决定在文档中简单地放置警告。

    永久链接装饰器应该被弃用并最终被移除。 引入它是为了解决必须将 url 硬编码到 get_absolute_url 中的问题。然而,它违反了优秀装饰器的主要规则之一,即强制函数签名更改以处理它已被装饰的事实。此外,与直接在 get_absolute_url 的主体中使用 reverse() 相比,它没有提供任何有用的功能。

    【讨论】:

    • 摘自 django 文档:“此装饰器(永久链接)采用 URL 模式(视图名称或 URL 模式名称)的 name 和位置列表或关键字参数并使用 URLconf 模式来构造正确的完整 URL。”为什么使用永久链接会伤害 DRY?我们仍然为@permalink 提供 url 名称或视图路径,而无需重新声明它?
    • 你说得对——我没有正确阅读文档就写了答案。我会做一些研究,看看我是否可以改变我的答案。
    • 谢谢乔希。我找不到这个,我相信文档没有提到它已被弃用。
    • @Aleyna 他们决定弃用它,因为它会无缘无故地破坏升级路径。他们可能会在版本 2 中弃用,但他们正在为文档中的警告做好准备。
    • @permalink 现在已弃用,从 django 1.11 开始。见docs.djangoproject.com/en/1.11/releases/1.11/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    相关资源
    最近更新 更多