Django 模板:获取另一种语言的当前 URL [英] Django templates: Get current URL in another language
问题描述
我正在使用 i18n_patterns
在 Django 应用中创建语言前缀.
I'm using i18n_patterns
to create language prefixes in a Django app.
我的网址如下所示:
/de/contact/
/fr/contact/
/it/contact/
在我的基本模板中,我循环显示所有可用语言以显示语言切换链接.
In my base template, I'm looping over all available languages to show the language switch links.
{% get_available_languages as languages %}
<nav id="language_chooser">
<ul>
{% for lang_code, lang_name in languages %}
{% language lang_code %}
<li><a href="{% url 'home' %}" alt="{{ lang_name }}" title="{{ lang_name }}">{{ lang_code }}</a></li
{% endlanguage %}
{% endfor %}
</ul>
</nav>
在这种情况下,我将反转主页"网址.有没有办法获取当前页面的翻译后的 URL?
In this case, I'm reversing the "home" URL. Is there a way to get a translated URL of the current page instead?
如果我在德语版的联系方式"页面上,我希望fr"链接指向法语版的联系方式"页面,而不是主页"页面.
If I'm on the German version of my "contact" page, I want the "fr" link to point to the French version of the "contact" page, not to the "home" page.
推荐答案
我没有使用语言前缀,而是使用翻译后的 url.但是,这个模板标签也应该对您有所帮助:
I'm not using language prefixes, but translated urls instead. However, this template tag should also help you:
# This Python file uses the following encoding: utf-8
from django import template
from django.core.urlresolvers import reverse # from django.urls for Django >= 2.0
from django.core.urlresolvers import resolve # from django.urls for Django >= 2.0
from django.utils import translation
register = template.Library()
class TranslatedURL(template.Node):
def __init__(self, language):
self.language = language
def render(self, context):
view = resolve(context['request'].path)
request_language = translation.get_language()
translation.activate(self.language)
url = reverse(view.url_name, args=view.args, kwargs=view.kwargs)
translation.activate(request_language)
return url
@register.tag(name='translate_url')
def do_translate_url(parser, token):
language = token.split_contents()[1]
return TranslatedURL(language)
它以所需语言返回当前网址.像这样使用它:{% translate_url de %}
It returns the current url in the desired language. Use it like this: {% translate_url de %}
欢迎提出改进意见和建议.
Comments and suggestions for improvements are welcome.
这篇关于Django 模板:获取另一种语言的当前 URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!