不要国际化/翻译URL

时间:2016-11-10 11:58:23

标签: python django django-urls django-1.10

问题

我目前正在尝试从Django 1.10.3升级到Django 1.9.8。目前我的测试失败了,因为由于某种原因,当我reverse()时,Django正试图翻译/国际化我的网址。

在国际化方面我没有改变任何东西,而且非常想转变这个"功能"关闭。它不仅没有通过大量的测试,而且还有一些 的项目静态地引用了这个网站的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内化/翻译。或者,如果无法做到这一点会有什么好处呢?

提前致谢。

3 个答案:

答案 0 :(得分:13)

它可能是红鲱鱼(由不同的错误引起)。我必须解决在此错误消失之前加载urls.py文件时抛出的几个不同异常。尝试放入django shell并运行这些命令:

from django.urls import reverse
reverse('indexpage')

你应该看到导致问题的真正错误。解决问题并重复,直到您没有更多例外。

答案 1 :(得分:1)

在引入错误的更改中使用reverse_lazy代替reverse

好像您在django注册之前尝试使用reverse获取url。

http://www.boxtricks.com/keyerror-en-us-when-doing-a-reverse-lookup-in-urls-py/

答案 2 :(得分:0)

你需要设置标志

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)),
)