不要 internationalize/translate 个网址
Do not internationalize/translate URLs
问题
我目前正在尝试从 Django 1.9.8
升级到 Django 1.10.3
。然而,目前我的测试失败了,因为出于某种原因,当我 reverse()
它们时,Django 试图 translate/internationalize 我的 URLs。
关于国际化,我没有做任何更改,非常想关闭此 "feature"。不仅很多测试都失败了,还有一些项目有静态引用这个网站的URL。这意味着本网站上的 URL 不允许更改(否则我必须为 Django 提出的每个翻译编辑它们,这将是一个真正的痛苦)。
错误
我在测试中遇到的实际错误如下:
Traceback (most recent call last):
File "/tests/unit/views/test_index.py", line 14, in setUp
self.url = reverse('indexpage')
File "/local/lib/python2.7/site-packages/django/urls/base.py", line 91, in reverse
return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "/local/lib/python2.7/site-packages/django/urls/resolvers.py", line 346, in _reverse_with_prefix
possibilities = self.reverse_dict.getlist(lookup_view)
File "/local/lib/python2.7/site-packages/django/urls/resolvers.py", line 243, in reverse_dict
return self._reverse_dict[language_code]
KeyError: 'nl-nl'
很明显,Django 正在尝试使用此项目设置中提供的语言代码来做一些事情。
我尝试了什么
我已经尝试将 USE_I18N
设置设置为 False
。我也为 USE_L10N
试过这个。我还尝试删除设置中指定的 LANGUAGE_CODE
,但抛出的错误是指 en-us
语言代码而不是 nl-nl
语言代码。我也尝试安装 LocaleMiddleware
看看我是否至少可以让错误停止显示,但不幸的是这也没有用。
问题
如何在 Django 中关闭 URL internalization/translation。或者,如果这不可能,什么是好的替代方案?
提前致谢。
你需要升旗
USE_I18N = False
根据 Vijesh Venugopal 的建议,还要确保您的网址包含在以下部分中:-
urlpatterns += [
url("^", include("your_app.urls")),
]
不要将它们包含在这些下面
urlpatterns = i18n_patterns(
# Change the admin prefix here to use an alternate URL for the
# admin interface, which would be marginally more secure.
url("^admin/", include(admin.site.urls)),
)
可能是转移注意力(由不同的错误引起)。在这个错误消失之前,我不得不处理加载 urls.py
文件时抛出的几个不同的异常。尝试放入 django shell 和 运行 这些命令:
from django.urls import reverse
reverse('indexpage')
您应该会看到导致问题的真正错误。修复问题并重复,直到没有更多异常。
对引入错误的更改使用 reverse_lazy
而不是 reverse
。
看起来你试图在 django 注册之前用 reverse
获取 url。
http://www.boxtricks.com/keyerror-en-us-when-doing-a-reverse-lookup-in-urls-py/
问题
我目前正在尝试从 Django 1.9.8
升级到 Django 1.10.3
。然而,目前我的测试失败了,因为出于某种原因,当我 reverse()
它们时,Django 试图 translate/internationalize 我的 URLs。
关于国际化,我没有做任何更改,非常想关闭此 "feature"。不仅很多测试都失败了,还有一些项目有静态引用这个网站的URL。这意味着本网站上的 URL 不允许更改(否则我必须为 Django 提出的每个翻译编辑它们,这将是一个真正的痛苦)。
错误
我在测试中遇到的实际错误如下:
Traceback (most recent call last):
File "/tests/unit/views/test_index.py", line 14, in setUp
self.url = reverse('indexpage')
File "/local/lib/python2.7/site-packages/django/urls/base.py", line 91, in reverse
return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "/local/lib/python2.7/site-packages/django/urls/resolvers.py", line 346, in _reverse_with_prefix
possibilities = self.reverse_dict.getlist(lookup_view)
File "/local/lib/python2.7/site-packages/django/urls/resolvers.py", line 243, in reverse_dict
return self._reverse_dict[language_code]
KeyError: 'nl-nl'
很明显,Django 正在尝试使用此项目设置中提供的语言代码来做一些事情。
我尝试了什么
我已经尝试将 USE_I18N
设置设置为 False
。我也为 USE_L10N
试过这个。我还尝试删除设置中指定的 LANGUAGE_CODE
,但抛出的错误是指 en-us
语言代码而不是 nl-nl
语言代码。我也尝试安装 LocaleMiddleware
看看我是否至少可以让错误停止显示,但不幸的是这也没有用。
问题
如何在 Django 中关闭 URL internalization/translation。或者,如果这不可能,什么是好的替代方案?
提前致谢。
你需要升旗
USE_I18N = False
根据 Vijesh Venugopal 的建议,还要确保您的网址包含在以下部分中:-
urlpatterns += [
url("^", include("your_app.urls")),
]
不要将它们包含在这些下面
urlpatterns = i18n_patterns(
# Change the admin prefix here to use an alternate URL for the
# admin interface, which would be marginally more secure.
url("^admin/", include(admin.site.urls)),
)
可能是转移注意力(由不同的错误引起)。在这个错误消失之前,我不得不处理加载 urls.py
文件时抛出的几个不同的异常。尝试放入 django shell 和 运行 这些命令:
from django.urls import reverse
reverse('indexpage')
您应该会看到导致问题的真正错误。修复问题并重复,直到没有更多异常。
对引入错误的更改使用 reverse_lazy
而不是 reverse
。
看起来你试图在 django 注册之前用 reverse
获取 url。
http://www.boxtricks.com/keyerror-en-us-when-doing-a-reverse-lookup-in-urls-py/