django i18n - 获取不同语言的当前路径

时间:2017-05-25 07:24:10

标签: python django django-templates django-i18n django-template-filters

我正在使用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>

提前致谢!

1 个答案:

答案 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