【问题标题】:name 'urlpatterns' is not defined when doing translation (+= i18n_patterns)翻译时未定义名称“urlpatterns”(+= i18n_patterns)
【发布时间】:2017-06-06 23:28:59
【问题描述】:

我想在 URL 模式中添加语言前缀,就像 django 文档主页一样。跟着这个example 我的urls.py 看起来像这样:

from django.conf.urls import include, url
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin

from myapp import views
from myapp.views import MyFirstView, MySecondView

myapp_patterns = [
    url(r'^$', views.CategoryView, name='index'),
    url(r'^(?P<name>[a-zA-Z0-9_]+)/$', MyFirstView.as_view(), name='detail'),
    url(r'^(?P<name>[a-zA-Z0-9_]+)/mysecond_view/$', MySecondView, name='mysecond_view')
]

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^categories/', include(myapp_patterns)),
    url(r'^', views.LandingView),
]

这可行,但现在当我添加 += i18n_patterns

urlpatterns += i18n_patterns [
    url(r'^admin/', admin.site.urls),
    url(r'^categories/', include(myapp_patterns)),
    url(r'^', views.LandingView),
]

我收到错误:NameError: name 'urlpatterns' is not defined

我确实添加了LocalMiddleware

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

还有这个:

LANGUAGE_CODE = 'en-us'

USE_I18N = True

USE_L10N = True

LOCALE_PATHS = (
        os.path.join(BASE_DIR, 'locale'),
)

我不明白为什么urlpatterns 突然不再定义了。 我在这里做错了什么?

【问题讨论】:

  • 你试过i18n_patterns(..)而不是i18n_patterns [..]吗?
  • 是的,我也试过了,没有任何改变
  • urlpatterns += i18n_patterns 应该是urlpatterns= i18n_patterns

标签: django url-pattern language-translation


【解决方案1】:

主要是因为+=urlpatterns 之前没有定义。

您应该从分配= 开始定义它。

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多