【问题标题】:Django URL Translation - Stay on the same page when changing languageDjango URL Translation - 更改语言时保持在同一页面上
【发布时间】:2013-05-03 06:31:19
【问题描述】:

我也用 i18n 为 url 开发了一个 Django 应用程序。

这看起来很不错,但是在更改语言时,我希望留在相同/上一个页面上。

最好的方法是什么?

基本上要获得新的网址,我需要在更改语言并进行重定向后在上一页的名称上做一个reverse,但我怎么知道上一页的网址名称?

编辑:

来自一位同事的解决方案:

使用 request.resolver_match 计算每种语言的下一个参数。 对于每种语言:activate(language) + reverse('{app_name}:{url_name}', args, kwargs) 使用 request.resolver_match 元素

你有更好的主意吗?

【问题讨论】:

    标签: django internationalization django-urls


    【解决方案1】:

    使用 django-modeltranslation 重定向到主页更改语言后?

    如果要重定向到同一个页面,可以替换这部分代码:

    {% get_current_language as LANGUAGE_CODE %}
    {% get_available_languages as LANGUAGES %}
    {% get_language_info_list for LANGUAGES as languages %}
    <div class="languages">
    <p>{% trans "Language" %}: </p>
      <ul class="languages">
        {% for language in languages %}
          <li>
            <a href="/{{ language.code }}/
              {% if language.code == LANGUAGE_CODE %} class="selected"{% endif %}>
              {{ language.name_local }}
            </a>
          </li>
        {% endfor %}
      </ul>
    </div>
    

    到:

    {% get_current_language as LANGUAGE_CODE %}
    {% get_available_languages as LANGUAGES %}
    {% get_language_info_list for LANGUAGES as languages %}
    <div class="languages">
    <p>{% trans "Language" %}: </p>
      <ul class="languages">
        {% for language in languages %}
          <li>
            <a href="/{{ language.code }}/{{request.get_full_path|slice:"4:"}}"
              {% if language.code == LANGUAGE_CODE %} class="selected"{% endif %}>
              {{ language.name_local }}
            </a>
          </li>
        {% endfor %}
      </ul>
    </div>
    

    请注意:

    【讨论】:

      【解决方案2】:

      两种选择:

      选项 1

      如果您使用documentation 中的form,则将带您回到您所在的页面。

      选项 2

      更改语言时,您可以使用引荐来源标头 HTTP_REFERER 并重定向回您的来源

      # Change the language
      # ... code ...
      
      # Redirect back to where we came from
      redirect_to = request.META.get('HTTP_REFERER', reverse('default-redirect-page'))
      return HttpResponseRedirect(redirect_to)
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 2013-11-25
      • 1970-01-01
      • 2022-10-04
      • 2022-11-29
      • 1970-01-01
      • 2021-05-25
      相关资源
      最近更新 更多