我正在使用Django并开发一个提供多种语言的i18n网站。我想创建一个保留在base.html中的模态,以便用户可以在任何地方切换语言。
我设法做了这样的事情。
/ja/
其中包含以下网址:/en/
,/fr/
,{{request.path}}
等。
但这种方法只链接到主页面。
将{{request.get_full_path}}
或<a href="{{ request.path }}" class="btn lang-btn {% ifequal request.LANGUAGE_CODE lang_code %}selected{% endifequal %}">{{lang_code|lang_name}}</a>
用于网址时如下:
/foo/
它不包含i18n url模式..
有没有办法用request.path ??
指示当前网址:定位
在/ja/foo/
时:/en/foo/
/fr/foo/
/bar/
在/ja/bar/
时:/en/bar/
/fr/bar/
<label>Name only
<select ng-model="search.name">
<option value="John">John</option>
<option value="Mary">Mary</option>
<option value="Mary">Mary</option>
</select>
</label>
<br>
<table id="searchObjResults">
<tr>
<th>Name</th>
<th>Phone</th>
</tr>
<tr ng-repeat="friendObj in friends | filter:search:strict">
<td>{{friendObj.name}}</td>
<td>{{friendObj.phone}}</td>
</tr>
</table>
提前致谢!
答案 0 :(得分:2)
本SO主题讨论了这个主题:Django templates: Get current URL in another language。
在我的项目中,我使用这个简单的模板标记(取自https://djangosnippets.org/snippets/2875/),它以另一种语言返回当前视图的URL。
<强> foo/templatetags/i18n_urls.py
强>
from django import template
from django.core.urlresolvers import translate_url
register = template.Library()
@register.simple_tag(takes_context=True)
def change_lang(context, lang: str, *args, **kwargs):
path = context['request'].path
return translate_url(path, lang)
<强> some_template.html
强>
{% load i18n_urls %}
<ul>
<li>
<a href="{% change_lang 'en' %}">EN</a>
</li>
<li>
<a href="{% change_lang 'cs' %}">CS</a>
</li>
<li>
<a href="{% change_lang 'de' %}">DE</a>
</li>
</ul>
请注意,官方Django文档中未记录translate_url
函数。以下是此函数的源代码:https://github.com/django/django/blob/master/django/urls/base.py#L161-L181。