Sar*_*ica 6 python django internationalization
我正在尝试将我的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
Run Code Online (Sandbox Code Playgroud)
我的setting.py文件包含以下内容:
LANGUAGE_CODE = 'en-gb'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
TIME_ZONE = 'Europe/London'
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
小智 12
我也遇到了这个,我缩小了原因.我认为这是Django的一个回归,但我没有时间写一个完整的错误报告.这就是我所知道的.
Django一直等到第一次调用将django.urls.reverse所有命名空间填充到缓存中dict.
最近这个人口程序发生了一些变化.他们添加了一个populating标志,当您开始填充时,该标志设置为True,并在调用时共享reverse.如果填充过程恰好进行调用django.urls.reverse,则该标志将阻止无限递归.
填充过程涉及导入URL模式 - urls.py您在应用程序中拥有的文件.如果导入过程中的任何内容引发异常,例如在我的情况下模块顶层的未定义名称,则填充算法不会捕获该异常,并且只是完全停止,并将填充标志保留为True.这个错误,至少对我而言,传播到了顶层,我在测试运行器输出中看到了它.
所有后续调用都会django.urls.reverse引发命名空间的NoReverseMatch错误en-us.在代码之后,这是因为在填充过程开始时,如果populating标志是真实的,那么进程只返回并返回缓存的命名空间dict,它是空的,导致KeyError en-us,导致NoReverseMatchfor en-us.
您应该查看在第一个NoReverseMatch找到罪魁祸首之前发生的错误.有关更多信息,我认为这是引入回归的提交.它有一个链接到它修复的Django问题.我认为解决方法是populating在异常的情况下将标志设置为False,但我不确定.
| 归档时间: |
|
| 查看次数: |
3828 次 |
| 最近记录: |