set_lanuguage 没有改变整个网页的语言,错过了浏览量的重定向

set_lanuguage is not changing the language of the enitre webpage and miss the redirections by views

我的表单带有语言 selection 按钮和一个更新按钮。客户更新表单是通过 django 表单和视图实现的,但是语言 selection 使用以下代码直接在 html 文件中实现:

{% load i18n %}

<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
    <input name="next" type="hidden" value="{{ redirect_to }}" />
    <select name="language">
        {% get_current_language as LANGUAGE_CODE %}
        {% get_available_languages as LANGUAGES %}
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}

            <option value="{{ language.code }}"{% if language.code ==     LANGUAGE_CODE %} selected{% endif %}>
                {{ language.name_local }} ({{ language.code }})
            </option>
        {% endfor %}
    </select>
    <input type="submit" value="Go" />
</form>

1:image of webpage rendered form

每当我 select 使用默认英语再次呈现任何语言的同一页面时。

我已将相关的上下文处理器和语言环境中间件放在设置文件中应有的位置。

我的root url配置文件如下:

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

urlpatterns += i18n_patterns(
    url(r'^', include('custupdate.urls')),

我的应用程序 url conf 已给出:

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^personBasic', views.person_detail, name='person_detail'),
    url(r'^licenseeBasic', views.licensee_detail, name='licensee_detail'),
    url(r'^address', views.address, name='address'),
    url(r'^contact', views.contact, name='contact'),
    url(r'^email', views.email, name='email'),
]

我的每个 url 例如 personBasic 与其相关视图挂钩,并且视图与相关表单挂钩。

现在,当我在地址栏中输入以下 url 并按回车键时 http://mycompany.com/custupdate 由于上述 url 配置,它转到索引视图,重定向到以下 url http://mycompany.com/custupdate/personBasic 图像 1 显示在浏览器中。 因此 select 使用任何语言都会在不更改语言的情况下再次呈现同一页面。

当我在浏览器中检查元素是否有任何语言按钮时,我得到了以下 url 请求 http://mycompany.com/custupdate/i18n/setlang/

而不是 http://mycompany.com/custupdate/personBasic/i18n/setlang/

问题是当按下语言按钮时,地址栏中的整个 url 不应该呈现为翻译版本。 custupdate 之后的任何内容都以某种方式被跳过,并且 i18n/setlang 被附加在 custupdate 之后,我希望它是这样的 /custupdate/personBasic/i18n/setlang/ 要么 /custupdate/联系人/i18n/setlang/ 要么 /custupdate/电子邮件/i18n/setlang/

将您的根 URLconf 更改为:

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

urlpatterns += i18n_patterns(
    url(r'^', include('custupdate.urls')),
)

此外,在您的表单中,完全删除名为 next 的隐藏输入。您尚未定义 redirect_to 变量。

此外,请确保您有 set middlewares in the correct order