gpt4 book ai didi

python - Django 1.9 到 1.10 引发 NoReverseMatch : u'en-gb' is not a registered namespace

转载 作者:太空狗 更新时间:2023-10-29 22:10:40 25 4
gpt4 key购买 nike

我正在尝试将我的 1.9 应用程序更新到 1.10,但在运行所有单元测试时出现以下错误:

Traceback (most recent call last):   File "/home/…/tests/views/test_configurator.py", line 261, in test_view_configurator_post
args=[self.configurator.id]), File "/home/…/.virtualenvs/intranet/lib/python2.7/site-packages/django/urls/base.py", line 87, in reverse
raise NoReverseMatch("%s is not a registered namespace" % key) NoReverseMatch: 'en-gb' is not a registered namespace

我的 setting.py 文件包含以下内容:

LANGUAGE_CODE = 'en-gb'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
TIME_ZONE = 'Europe/London'

我错过了什么?

最佳答案

我也遇到了这个问题,查了一下原因。我认为这是 Django 的回归,但我没有时间写完整的错误报告。这是我所知道的。

Django 等到第一次调用 django.urls.reverse 时将所有命名空间填充到缓存的 dict 中。

最近对该填充程序进行了一些更改。他们添加了 a populating flag that is set to True when you start populating ,并在对 reverse 的调用中共享。如果填充过程恰好调用了 django.urls.reverse,该标志将防止无限递归。

填充过程涉及导入 URL 模式 - 您的应用程序中的 urls.py 文件。如果在该导入过程中出现任何异常,例如在我的例子中,一个模块顶层的未定义名称,填充算法没有捕捉到它,只是完全停止,将填充标志保留为 True。至少对我而言,该错误已传播到顶层,并且我在测试运行程序输出中看到了它。

所有对 django.urls.reverse 的后续调用都会为 en-us 命名空间引发一个 NoReverseMatch 错误。按照代码,这是因为在填充过程开始时,如果 populating 标志为真,该过程只是返回并返回缓存的命名空间字典,它是空的,导致 的 KeyError >en-us,导致 en-usNoReverseMatch

您应该查看第一个 NoReverseMatch 之前发生的错误以找到您的罪魁祸首。有关更多信息,我认为 this is the commit that introduced the regression .它有一个指向它修复的 Django 问题的链接。我认为解决方法是将 populating 标志设置为 False 以防出现异常,但我不确定。

关于python - Django 1.9 到 1.10 引发 NoReverseMatch : u'en-gb' is not a registered namespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39917987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com