msa*_*aio 2 django django-forms django-i18n
我需要将语言选择器呈现为Django中的无序列表,例如:
<ul>
...
<li><a href="???">EN</a></li>
<li><a href="???">FR</a></li>
<ul>
Run Code Online (Sandbox Code Playgroud)
我使用的是i18n/set_language不带Django的Django i18n_pattern,如果我使用以下文档中提供的表格,则效果很好:
{% load i18n %}
<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<select name="language">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% 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>
Run Code Online (Sandbox Code Playgroud)
我想继续使用i18n/set_language,但使用<li>结构,但不使用表单<select>和提交按钮。
可能吗?我该怎么办?
正如该链接所说明的那样,内置的set_language视图需要一个POST,而您不能通过链接执行该操作(除非使用Javascript)。
但是下一节“ 显式设置活动语言 ”为您提供了编写自己的视图(可以从URL获取参数)所需的所有详细信息。所以:
def set_language_from_url(request, user_language):
translation.activate(user_language)
request.session[translation.LANGUAGE_SESSION_KEY] = user_language
return redirect(' ...somewhere... ')
Run Code Online (Sandbox Code Playgroud)
并给它一个URL:
url(r'/set_language/(?P<user_language>\w+)/$', set_language_from_url, name="set_language_from_url")
Run Code Online (Sandbox Code Playgroud)
现在您可以执行以下操作:
<li><a href="{% url "set_language_from_url" user_language="en" %}">EN</a></li>
<li><a href="{% url "set_language_from_url" user_language="fr" %}">FR</a></li>
Run Code Online (Sandbox Code Playgroud)
等等
| 归档时间: |
|
| 查看次数: |
855 次 |
| 最近记录: |