【问题标题】:set_lanuguage is not changing the language of the enitre webpage and miss the redirections by viewsset_language 没有改变整个网页的语言,并错过了视图的重定向
【发布时间】:2018-10-11 03:27:17
【问题描述】:

我的表单带有语言选择按钮和更新按钮。客户更新表单是通过 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:image of webpage rendered form

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

我已将相关的上下文处理器和区域设置中间件放置在设置文件中的位置。

我的根 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 都与它的相关视图挂钩,而视图则与相关表单挂钩。

现在,当我在地址栏中输入以下网址并按 Enter 时 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 之后的任何内容都会以某种方式被跳过,并且 i18n/setlang 会在 custupdate 之后附加,我希望它是这样的 /custupdate/personBasic/i18n/setlang/ 或者 /custupdate/contact/i18n/setlang/ 或者 /custupdate/email/i18n/setlang/

【问题讨论】:

    标签: django python-3.x internationalization django-i18n


    【解决方案1】:

    将您的根 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

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2016-03-07
      • 1970-01-01
      • 2020-03-04
      • 2016-10-20
      • 1970-01-01
      相关资源
      最近更新 更多