【发布时间】:2017-11-14 02:06:45
【问题描述】:
我有一个想要国际化的 Django 网站。到目前为止,它看起来像这样:
主页:
www.myhomepage.com
另一页:
www.myhomepage.com/content/cities
现在我正在尝试这样:
主页:
www.myhomepage.com/enwww.myhomepage.com/de
另一页:
www.myhomepage.com/en/content/citieswww.myhomepage.com/de/content/cities
在this 和this 之后,我设法使主页正常工作,所以www.myhomepage.com/en 我看到的是英文主页,www.myhomepage.com/de 我看到的是德文主页。
当我想转到任何其他页面时出现问题,例如www.myhomepage.com/en/content/cities。然后,呈现的页面仍然是主页。在更改任何设置以使其国际化之前,www.myhomepage.com/content/cities 已正确显示。
我的猜测是问题出在视图渲染或 url 上,但我无法让它工作。
请注意,www.myhomepage.com 的视图属于一个应用,content/cities 的视图属于另一个应用。
这是我的代码:
settings.py
MIDDLEWARE_CLASSES = [
...
'django.middleware.locale.LocaleMiddleware',
...
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
...
'django.template.context_processors.i18n',
],
},
},
]
from django.utils.translation import ugettext_lazy as _
LANGUAGES = (
('en', _('English')),
('de', _('German')),
)
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
LANGUAGE_CODE = 'en-us'
USE_I18N = True
主应用:
urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
urlpatterns += i18n_patterns('',
url(r'^content/', include('content.urls', namespace='content')),
)
views.py
from django.shortcuts import render
def home_view(request):
...
context = {
...
}
#print('request home', request)
return render(request, 'home_template.html', context)
通过激活打印语句并加载www.myhomepage.com/en/content/cities,在控制台中打印以下内容:request home: <WSGIRequest: GET '/en/content/cities/'>,即使此视图属于主页。
内容应用:
urls.py
from .views import countries_and_cities
urlpatterns = [
...
url(r'^cities/$', countries_and_cities),
...
]
views.py
from django.shortcuts import render
def countries_and_cities(request):
...
context = {
...
}
return render(request, 'cities_template.html', context)
我也尝试了docs中的建议,但没有成功。
urls.py 来自主应用:
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
from content import views as content_views
content_patterns = ([
url(r'^cities/$', content_views.countries_and_cities, name='cities'),
], 'content')
urlpatterns += i18n_patterns('',
url(r'^content/', include(content_patterns, namespace='content')),
)
我做错了什么?
【问题讨论】:
标签: django internationalization django-views django-urls django-i18n