尝试从Django模板更改语言的问题
我需要包括两个按钮或链接,以允许用户在英语和西班牙语之间更改语言。我已经阅读了文档并尝试了以下操作:
<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>
更新:
经过进一步测试后,我注意到在i18n_patterns
和patterns
中都使用和都存在问题urls.py
。目前,我有一个看起来像的文件:
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
,所以我认为这应该起作用,但事实并非如此!无论你django.conf.urls.i18n
在之前还是之后添加i18n_patterns
它,都始终一样。
回答:
首先,让我解释一下问题:i18_patterns
在你urls.py
的语言代码中添加前缀时,如果你调用URL set_language
更改语言而未指定next,则默认为当前语言,但使用的是旧的语言代码!因此,该语言恢复了原来的语言!并且,如果你明确指定next,则必须确保一开始就不要包含语言代码。
如果你使用{{ request.path }}
或将该页面{{ request.get_full_path }}
指定next为当前页面,则此操作将无效,因为它也会返回语言代码。
因此,我们如何删除不希望使用的语言代码,以使用时更改的语言重新加载当前页面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>
以上是 尝试从Django模板更改语言的问题 的全部内容, 来源链接: utcz.com/qa/416008.html