多语言网站的 Django 重定向

Posted

技术标签:

【中文标题】多语言网站的 Django 重定向【英文标题】:Django redirect for multilingual website 【发布时间】:2016-05-17 09:26:18 【问题描述】:

我正在开发一个法语和英语双语网站,我正在尝试弄清楚如何检测法语用户并将其重定向到 index_fr.html(在模板文件夹中)。

我的 urls.py(它现在只显示英文版):

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', profiles.views.home, name='home'),
]

【问题讨论】:

您希望为法国用户更改 URL 还是仅更改模板?你启用LocaleMiddleware了吗?如果是这样,您的 request 对象有一个 request.LANGUAGE_CODE 属性,您可以在视图中检查。 或者只是在您的所有网址中添加一个“^([az]+)/”类型参数...从您的问题中不清楚该网站的现有框架是什么样的,并且因此,什么是合适的解决方案? 【参考方案1】:

感谢您的回复。

正如 dhke 所说,我启用了 LocalMiddleware 并使用 request.LANGUAGE_CODE 在 vi​​ews.py 中编写了一个函数,该函数根据语言呈现模板并且它可以工作!:

views.py:

from django.http import HttpResponse

def home(request):

context=
if request.LANGUAGE_CODE == 'fr':
    template='index_fr.html'
else:
    template='index_en.html'

return render(request,template,context)

def fr(request):

context=
template='index_fr.html'
return render(request,template,context)

def all(request):

context=
template='index_en.html'
return render(request,template,context)

urls.py:

urlpatterns =[
url(r'^admin/', admin.site.urls),

url(r'^$', profiles.views.home, name='home'),
url(r'^index_fr.html', profiles.views.fr, name='fr'),
url(r'^index_en.html', profiles.views.all, name='all'),

]

【讨论】:

以上是关于多语言网站的 Django 重定向的主要内容,如果未能解决你的问题,请参考以下文章

重定向子目录中的所有内容,但不重定向子目录本身

Laravel 在区域设置更改时重定向到路由

在Symfony 4中将路由重定向到语言前缀

django 重定向

用于重定向的 Django 自定义装饰器

带有预处理的 Django 页面重定向