settings.DEBUG 的值在 Django 测试中的设置和 url 之间变化

Posted

技术标签:

【中文标题】settings.DEBUG 的值在 Django 测试中的设置和 url 之间变化【英文标题】:Value of settings.DEBUG changing between settings and url in Django Test 【发布时间】:2017-01-10 08:57:14 【问题描述】:

我正在尝试为一些仅在调试中设置的 URL 设置测试。它们没有设置,因为在我的设置文件和 urls.py 之间显然 DEBUG 的值更改为 False。我以前从未遇到过这个问题,我不记得做过什么特别花哨的涉及 DEBUG 值的事情。

这是我的 urls.py :

from django.conf import settings
from my_views import dnfp
print "settings.DEBUG in url: ".format(settings.DEBUG)
if settings.DEBUG:
    urlpatterns += [url(r'^dnfp/$', dnfp, name="debug_not_found_page"...

这是我的设置文件:

DEBUG=True
print "DEBUG at the end of the settings: ".format(DEBUG)

我测试失败的内容:

 reverse("debug_not_found_page"), 

这是测试的输出:

DEBUG at the end of the settings: True
settings.DEBUG in url: False
Creating test database for alias 'default'...
.E
(...)
NoReverseMatch: Reverse for 'debug_not_found_page' with arguments '()' and keyword arguments '' not found. 0 pattern(s) tried: []

如果我自己更改 urls.py 中的值,则会再次设置 url,并且测试可以使用此 urls.py :

from django.conf import settings
from my_views import dnfp
settings.DEBUG = True
if settings.DEBUG:
    urlpatterns += [url(r'^dnfp/$', dnfp, name="debug_not_found_page"...

任何想法何时以及为什么我的 DEBUG 值在设置和 url 之间发生变化?

【问题讨论】:

【参考方案1】:

来自docs

无论配置文件中 DEBUG 设置的值如何,所有 Django 测试都以 DEBUG=False 运行。这是为了确保观察到的代码输出与生产环境中的输出相匹配。

【讨论】:

非常感谢!对于你们这些人是如何用谷歌搜索的,下一步就在这里:***.com/questions/7447134/…【参考方案2】:

您的代码的问题是您在此行之后设置了 DEBUG = True

   urlpatterns += [url(r'^dnfp/$', dnfp, name="debug_not_found_page"

原因是所有的 URL 都已经附加到 urlpatterns[] 并且您在附加 URL 之后设置它,并且在附加 URL 时,Django 实际上将控制权转移到 urls.py 以进行语法验证。这就是为什么你在 urls.py 中得到不同的价值。

设置此行之前的DEBUG值

试试这个,希望它会工作。

您可以使用另一种方法来执行此操作,为所有这些类型的 URL 创建一个单独的应用程序,并且不要根据调试变量将该应用程序添加到 INSTALLED_APPS。

【讨论】:

以上是关于settings.DEBUG 的值在 Django 测试中的设置和 url 之间变化的主要内容,如果未能解决你的问题,请参考以下文章

根据值在 Admin 中自定义 Django 表单字段

禁用“记住每个 SQL 查询”(Django)

你如何在 django 网站上记录服务器错误

如何根据模型值在 Django 管理图标中显示

Django 调试视图,用于管理员的生产环境

变量的值在observeSingleEvent 中没有变化