我是Django的新手并在这里开展一个项目,那里有一个小问题我似乎无法找到解决方法:
我可以使用localhost:8000/
访问我的项目。此网址重定向到localhost:8000/en/dimension/
。 /en/
是我浏览器的默认语言环境,所以一切都很好。
但问题是,localhost:8000/fr/
仍会重定向到/en/dimension/
,同样适用于/nl/
。
这是我的urls.py文件:
from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
from django.shortcuts import redirect
from django.contrib import admin
from opendataApp.views import dimensionStep, productStep, zoneStep, formatStep, geographicalAreaStep, customStep, downloadStep, proxy, downloadCustom, statistics, statisticsReset, statisticsFilter
admin.autodiscover()
urlpatterns = patterns(
'',
url(r'^proxy/urbis/(?P<path>.*)$', proxy),
#translation
(r'^i18n/', include('django.conf.urls.i18n')),
(r'^admin/', include(admin.site.urls)),
# Uncomment the admin/doc line below to enable admin documentation:
#url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
#url(r'^admin/', include(admin.site.urls)),
)
urlpatterns += i18n_patterns(
'',
url(r'^$', lambda r: redirect('/dimension/'), name="home"),
url(r'^dimension', dimensionStep, name="dimensionStep"),
url(r'^product', productStep, name="productStep"),
url(r'^zone', zoneStep, name="zoneStep"),
url(r'^format', formatStep, name="formatStep"),
url(r'^selection', geographicalAreaStep, name="geographicalAreaStep"),
url(r'^custom-selection', customStep, name="custom"),
url(r'^download/$', downloadStep, name="download"),
url(r'^download-custom/$', downloadCustom, name="downloadCustom"),
url(r'^statistics/$', statistics, name="statistics"),
url(r'^statistics/reset$', statisticsReset, name="statisticsReset"),
url(r'^statistics/filter$', statisticsFilter, name="statisticsFilter"),
url(r'^accounts/login/$', 'django.contrib.auth.views.login'),
)
所以我的主要问题是redirect('/dimension/')
忽略了之前询问的区域设置并再次回退到默认区域设置。知道如何解决这个问题吗?
谢谢!
答案 0 :(得分:2)
LocaleMiddleware
负责确定浏览器应提供的语言;它一直在为您的浏览器选择en
,您需要找出原因。
有关详细信息,请参阅How Django discovers language preference,但简短命令是:
/
和/dimension/
,还没有一个。_language
密钥(回退到django_language
以获得向后兼容性)。django_language
Cookie(或您在settings.LANGUAGE_COOKIE_NAME
中设置的任何内容)Accept-Language
标题settings.LANGUAGE_CODE
。请注意, nothing 会明确设置会话密钥或Cookie;你自己的代码需要这样做。您可以使用set_language()
redirect view为您执行此操作;您的网络用户界面中的表单会POST到该视图,以便让访问者设置不同的语言。
当访问者访问/fr/
并且还没有明确的Cookie或会话密钥时,您还可以明确设置会话密钥或Cookie。您可以在^$
网址映射(适用于任何i18n_patterns()
请求)中/<language_code>/
附加的视图中执行此操作,而不是现在的重定向。当然,该视图仍然可以重定向。
即使没有明确设置Cookie,您的重定向也应至少使用request.LANGUAGE_CODE
变量:
url(r'^$', lambda r: redirect('/{}/dimension/'.format(r.LANGUAGE_CODE)), name="home"),
答案 1 :(得分:1)
您是否尝试过清除浏览器缓存?浏览器通常会缓存重定向。