加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Django 1.9到1.10引发NoReverseMatch:u’en-gb’不是

发布时间:2020-12-16 23:12:05 所属栏目:Python 来源:网络整理
导读:我正在尝试将我的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 "/ho
我正在尝试将我的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,并且在通话转换中共享.如果填充过程恰好调用django.urls.reverse,则该标志将阻止无限递归.

填充过程涉及导入URL模式 – 您的应用程序中的urls.py文件.如果导入过程中的任何内容引发异常,例如在我的情况下,在模块顶层的未定义名称,填充算法没有捕获它,只是完全停止,并将填充标志保留为True.这个错误,至少对我而言,传播到了顶层,我在测试运行器输出中看到了它.

对django.urls.reverse的所有后续调用都会为en-us命名空间引发NoReverseMatch错误.在代码之后,这是因为在填充过程开始时,如果填充标志是真实的,那么进程只返回并返回缓存的命名空间dict,它是空的,导致en-us的KeyError,导致NoReverseMatch为en -我们.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读