我开发了一个带有i18n的Django应用程序用于网址。
看起来非常不错,但在更改语言时,我希望保持相同/上一页。
这样做的最佳方式是什么?
基本上要获取新网址,我需要在更改语言并进行重定向后对上一页的名称执行reverse
,但我怎么知道上一页的网址名称?
修改
来自同事的解决方案:
使用request.resolver_match计算每种语言的下一个参数。
对于每种语言:activate(language) + reverse('{app_name}:{url_name}', args, kwargs)
使用request.resolver_match元素
你看到了更好的主意吗?
答案 0 :(得分:0)
有两种选择:
选项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)
答案 1 :(得分:0)
使用 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>
请注意:
<块引用>