如何抑制 Django 中的弃用警告?

新手上路,请多包涵

每次我使用 django-admin 命令时——甚至在 TAB 完成时——它都会抛出一个 RemovedInDjango19Warning (如果我使用 测试 命令,还会抛出更多)。我怎样才能抑制这些警告?

我正在使用 Django 1.8 和 Python 3.4(在虚拟环境中)。据我所知,所有这些警告都来自库而不是我的代码。

例子

这里有些例子:

  • …/lib/python3.4/importlib/_bootstrap.py:321: RemovedInDjango19Warning: django.contrib.contenttypes.generic is deprecated and will be removed in Django 1.9. Its contents have been moved to the fields, forms, and admin submodules of django.contrib.contenttypes. return f(*args, **kwds)

  • …/lib/python3.4/site-packages/django/contrib/admin/util.py:7: RemovedInDjango19Warning: The django.contrib.admin.util module has been renamed. Use django.contrib.admin.utils instead. "Use django.contrib.admin.utils instead.", RemovedInDjango19Warning)

  •  RemovedInDjango19Warning: Loading the ``url`` tag from the ``future`` library is deprecated and will be removed in Django 1.9. Use the default ``url`` tag instead.
    RemovedInDjango19Warning)

更新

自 Django 版本 1.11( 发行说明)以来,默认情况下弃用警告不再响亮。所以我想这不再是问题,因为 1.11 是支持 Python 2 的最后一个版本,并且还提供长期支持。

原文由 Brutus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 521
2 个回答

我会把这个留给新人:

至于 django 1.11 默认情况下,弃用警告不再响亮。要激活它们,请运行 python -Wd manage.py runserver 例如。

来源

原文由 Willemoes 发布,翻译遵循 CC BY-SA 3.0 许可协议

向 settings.py 添加日志过滤器可以抑制这些控制台警告(至少对于 Django 1.7、Python 3.4 中的 manage.py 命令)。

过滤器可以有选择地抑制警告。以下代码为控制台创建一个新的“suppress_deprecated”过滤器并将其附加到默认日志记录过滤器。将此块添加到 settings.py 以配置 LOGGING 变量:

 import logging, copy
from django.utils.log import DEFAULT_LOGGING

LOGGING = copy.deepcopy(DEFAULT_LOGGING)
LOGGING['filters']['suppress_deprecated'] = {
    '()': 'mysite.settings.SuppressDeprecated'
}
LOGGING['handlers']['console']['filters'].append('suppress_deprecated')

class SuppressDeprecated(logging.Filter):
    def filter(self, record):
        WARNINGS_TO_SUPPRESS = [
            'RemovedInDjango18Warning',
            'RemovedInDjango19Warning'
        ]
        # Return false to suppress message.
        return not any([warn in record.getMessage() for warn in WARNINGS_TO_SUPPRESS])

如果根网站模块(或过滤器位置和/或名称)不同,则需要更改“mysite.settings.SuppressDeprecated”字符串。

原文由 Fred Schleifer 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题