【问题标题】:Django: track down causes of DeprecationWarningDjango:追踪 DeprecationWarning 的原因
【发布时间】:2012-08-29 07:21:49
【问题描述】:

我已升级到 Django 1.4,现在当我运行我的开发服务器时,我收到以下警告:

/home/flc/venvs/myprj/lib/python2.6/site-packages/django/views/generic/simple.py:8:

DeprecationWarning:基于函数的通用视图已被弃用; 改用基于类的视图。 弃用警告

我已经找到了造成这种情况的大部分原因,并通过进行以下更改来修复它们:

django.views.generic.simple.direct_to_template => django.views.generic.base.TemplateView django.views.generic.simple.redirect_to => django.views.generic.base.RedirectView

但是,我仍然收到警告,无法弄清楚我错过了什么。如何在我的代码中获取导致 DeprecationWarning 的实际模块和行?

【问题讨论】:

    标签: django warnings deprecated


    【解决方案1】:

    您可以使用warnings 模块为DeprecationWarning 引发错误。

    暂时将以下sn-p添加到项目的urls.py顶部:

    import warnings
    warnings.simplefilter('error', DeprecationWarning)
    

    DeprecationWarning 现在会引发错误,所以如果debug=True 您将看到熟悉的黄色 Django 错误页面,其中包含完整的回溯。

    一旦您找到了弃用警告的来源,请记住删除 sn-p!请注意,导致弃用警告的可能是第三方应用,而不是您自己的代码。

    如果您不熟悉警告模块,您可能会发现 page on Python module of the week 比 Python 文档更容易介绍。

    【讨论】:

    • 看起来是注册包导致了 DepricationWarning。如果没有你的 sn-p,我需要更长的时间才能找到。非常感谢。
    • 这闻起来应该是一个设置 - DEBUG_WARNINGS 或类似的(尽管我们都讨厌更多设置的想法)
    • @s29 上面的答案只需要两行代码来实现,为什么还要添加另一个设置?
    • “包括电池”,这就是原因。我不应该用谷歌/stackoverflow这样的东西。
    • 如果上面的 sn-p 包含在 Django 文档中会很有用,但这并不意味着它可以证明设置的合理性。如果您想区别对待PendingDeprecationWarningDeprecationWarning 怎么办?一旦您了解了warnings.simplefilter,更改将是微不足道的。如果功能隐藏在设置后面,那么您必须返回 Django 文档。对我来说,“包括电池”意味着你不应该,比如说,实现你自己的函数来解码表单编码的数据。不过控制警告并不复杂,导入后只需要一行代码。
    【解决方案2】:

    您也可以在命令行上执行此操作,因此您无需修改​​代码。例如:

    python -We manage.py runserver --traceback
    

    官方文档是here。您可以使用缩写,-We 中的e 代表将警告转换为error

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 2015-10-20
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 2012-12-06
      • 2012-10-19
      • 2011-11-26
      • 1970-01-01
      相关资源
      最近更新 更多