gpt4 book ai didi

python - 尝试从 Django 模板更改语言的问题

转载 作者:太空狗 更新时间:2023-10-29 21:12:42 25 4
gpt4 key购买 nike

我需要包含两个按钮或链接,以允许用户在英语和西类牙语之间切换语言。我读过 the docs并试过这个:

<form action="/i18n/setlang/" method="post">{% csrf_token %}
<input name="language" type="hidden" value="es" />
<input type="submit" value="ES" />
</form>

但是,每次我单击该按钮时,页面都会重新加载,但语言根本没有改变。我错过了什么吗?

注意:我没有设置next,因为我只是想以所需的语言重新加载当前页面。

如果我使用文档提供的默认表单,结果是一样的:页面重新加载但语言没有改变:

<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<select name="language">
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
<input type="submit" value="Go" />
</form>

更新:

经过进一步测试,我注意到在 urls.py 中同时使用 i18n_patternspatterns 存在问题。目前我有一个看起来像这样的文件:

urlpatterns = i18n_patterns('',
url(r'^contents/', include('contents.urls')),
url(r'^events/', include('events.urls')),
# ...
)
urlpatterns += patterns('',
url(r'^i18n/', include('django.conf.urls.i18n')),
)

这似乎行不通。但是,如果我删除 i18n_patterns 并将其更改为 patterns 那么它似乎可以工作:

urlpatterns = patterns('',
url(r'^contents/', include('contents.urls')),
url(r'^events/', include('events.urls')),
# ...
)
urlpatterns += patterns('',
url(r'^i18n/', include('django.conf.urls.i18n')),
)

文档说您不必将它包含在 i18n_patterns 中,所以我认为这应该可行,但事实并非如此!在 i18n_patterns 之前或之后包含 django.conf.urls.i18n 都没有关系,它总是做同样的事情。

最佳答案

经过更多测试并感谢 related question由@AronYsidoro 链接,我终于找到了这个问题和一个非常简单的解决方案,它实际上解决了这个问题。

首先,让我解释一下这个问题:当在您的 urls.py 中使用 i18_patterns 来添加语言代码时,如果您调用 URL set_language 在不指定 next 的情况下更改语言,它默认为当前语言,但带有前置的旧语言代码!所以,语言又回到了原来的样子!并且,如果您明确指定 next,则必须确保不要在开头包含语言代码。

如果您使用{{ request.path }}{{ request.get_full_path }} 指定下一个为当前页面这不会起作用,因为它也会返回语言代码。

那么,在使用 i18n_patterns 时,我们如何删除这些不需要的语言代码以重新加载当前页面并更改语言?很简单,我们只需要切分前 3 个字符(斜线和两个字符的语言代码)!

这里有两个例子。第一个以选择的形式出现(以语言作为选择),另一个以按钮的形式出现(每种语言)。

我真的希望这对其他人有帮助。您可以复制并粘贴代码,它应该可以工作。但是,如果使用“按钮形式”,您只需将语言设置为您想要的!

从列表中更改语言:

<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ request.get_full_path|slice:'3:' }}" />
<select name="language">
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
<input type="submit" value="Change" />
</form>

更改语言作为按钮:

<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ request.get_full_path|slice:'3:' }}" />
<input name="language" type="hidden" value="es" />
<input type="submit" value="ES" />
</form>

关于python - 尝试从 Django 模板更改语言的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com