Django 使用“后无法设置语言”;i18n“U型”;在URL中显示语言前缀的步骤

Django 使用“后无法设置语言”;i18n“U型”;在URL中显示语言前缀的步骤,django,internationalization,django-templates,translation,django-urls,Django,Internationalization,Django Templates,Translation,Django Urls,正如所建议的,我希望在URL中显示一个语言前缀,并允许访问我网站的访问者使用模板中的表单更改语言。到目前为止,我一直在使用Django文档上和中的部分作为指南。我的代码大部分是从这个源代码复制的 问题 在我的URLconf中没有使用“i18n_模式”(在“模式”中有两个“url”调用),我设法在index.html页面上选择语言,并让Django将我重定向到使用我选择的新语言的同一页面。当然,语言URL前缀不会显示 当我使用“i18n_模式”时,语言前缀出现在URL中,但似乎破坏了从index

正如所建议的,我希望在URL中显示一个语言前缀,并允许访问我网站的访问者使用模板中的表单更改语言。到目前为止,我一直在使用Django文档上和中的部分作为指南。我的代码大部分是从这个源代码复制的


问题 在我的URLconf中没有使用“i18n_模式”(在“模式”中有两个“url”调用),我设法在index.html页面上选择语言,并让Django将我重定向到使用我选择的新语言的同一页面。当然,语言URL前缀不会显示

当我使用“i18n_模式”时,语言前缀出现在URL中,但似乎破坏了从index.html表单更改语言的能力。例如,如果我设置为英语,并且我在表单中从“English(en)”更改为“Türkçe(tr)”,那么页面基本上会进行刷新,而不会更改为土耳其语(英语仍然显示)。但是,我可以通过将URL语言前缀从“/en/”更改为“/tr/”来更改语言

页面/模板/页面/索引.html

{% load i18n %}
<html>
  <head>
  ...
  </head>
  <body>
    <form action="{% url 'set_language' %}" method="post">
    {% csrf_token %}
    <input name="next" type="hidden" value="{{ redirect_to }}" />
    <select name="language">
    {% get_language_info_list for LANGUAGES as languages %}
    {% for language in languages %}
    <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
        {{ language.name_local }} ({{ language.code }})
     </option>
    {% endfor %}
    </select>
    <input type="submit" value="Go" />
    </form>

    ...

    </body>    
</html>
注意:我使用的模板位于名为“页面”的应用程序中

如果您能帮助我们一起工作,我们将不胜感激!到目前为止,我还没有找到与此问题有关的任何信息。如果需要更多信息,请询问

这包含进一步的细节和一些可能的问题答案。没有一个解决方案是真正有吸引力的;也不应该真的需要。不幸的是,这似乎是Django的一个问题,在Django中,两个所需的“特性”无法“开箱即用”地协同工作,从而产生所需的效果。在我的例子中,因为我的站点是一个单页站点,所以我可以通过将上下文变量设置为“redirect_to”='/'(在视图中)来解决这个问题

from django.conf.urls import patterns, include, url 
from django.conf.urls.i18n import i18n_patterns

urlpatterns = patterns('',
    url(r'^i18n/', include('django.conf.urls.i18n')),
)

urlpatterns += i18n_patterns('',
    url(r'', include('pages.urls', namespace='pages')),
)