首页 > 解决方案 > set_lanuguage 没有改变整个网页的语言,并且错过了视图的重定向

问题描述

我的表单带有语言选择按钮和更新按钮。客户更新表单是通过 django 表单和视图实现的,但是语言选择是使用以下代码直接在 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:网页呈现形式的图像

每当我选择任何语言时,默认英语的相同页面都会再次呈现。

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

我的根 urlConf 如下所示:

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'),
]

我的每个网址(例如 personBasic)都与它的相关视图挂钩,而视图与相关表单挂钩。

现在,当我在地址栏中输入以下 url 并点击输入 http://mycompany.com/custupdate 由于上述 url 配置,它转到索引视图,重定向到以下 url http://mycompany.com/custupdate/personBasic 和图像1显示在浏览器中。因此,选择任何语言都会再次呈现相同的页面,而无需更改语言。

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

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

问题是当按下语言按钮时,地址栏中的整个 url 是否不应该呈现为翻译版本。无论 custupdate 之后是什么,都会以某种方式跳过,并在 custupdate 之后附加 i18n/setlang,我希望它像这样 /custupdate/personBasic/i18n/setlang/ 或 /custupdate/contact/i18n/setlang/ 或 /custupdate/email/ i18n/setlang/

标签: djangopython-3.xinternationalizationdjango-i18n

解决方案


将您的根 URLconf 更改为:

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

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

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

另外,请确保您以正确的顺序设置了中间件


推荐阅读