0

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

看起来真的很好,但是在更改语言时,我想留在同一/上一页上。

最好的方法是什么?

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

编辑:

来自同事的解决方案:

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

你看到更好的主意了吗?

4

2 回答 2

1

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

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

{% 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>

请注意:

<a href="/{{ language.code }}/

替换为 <a href="/{{ language.code }}/{{request.get_full_path|slice:"4:"}}"

于 2021-07-31T10:01:38.717 回答
0

两种选择:

选项1

如果您使用文档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)
于 2013-05-03T08:45:54.367 回答