django i18n - 获取不同语言的当前路径
django i18n - get current path for different language
我正在使用 Django 开发一个支持多种语言的国际化网站。我想制作一个保留在 base.html 中的模式,以便用户可以随时随地切换语言。
我设法做了这样的事情。
<div class="modal-body">
{% get_available_languages as languages %}
{% for lang_code, lang_name in languages %}
{% language lang_code %}
<a href="{% url 'home' %}" class="btn lang-btn {% ifequal request.LANGUAGE_CODE lang_code %}selected{% endifequal %}">{{lang_code|lang_name}}</a>
{% endlanguage %}
{% endfor %}
</div>
结果 url 像:/ja/
、/en/
、/fr/
等。
但是这种方法只链接到主页。
当对 url 使用 {{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>
它不包括 i18n url 模式..
有什么方法可以将电流 url 与 request.path 导通吗??
目标
在 /foo/
时:/ja/foo/
/en/foo/
/fr/foo/
在 /bar/
时:/ja/bar/
/en/bar/
/fr/bar/
提前致谢!
此 SO 问题中讨论了此主题:Django templates: Get current URL in another language。
在我的项目中,我使用这个简单的模板标签(取自 https://djangosnippets.org/snippets/2875/),它 returns 当前视图的 URL 另一种语言。
foo/templatetags/i18n_urls.py
:
from django import template
from django.urls 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>
请注意,translate_url
函数未记录在官方 Django 文档中。这是此函数的源代码:https://github.com/django/django/blob/master/django/urls/base.py#L161-L181.
我正在使用 Django 开发一个支持多种语言的国际化网站。我想制作一个保留在 base.html 中的模式,以便用户可以随时随地切换语言。
我设法做了这样的事情。
<div class="modal-body">
{% get_available_languages as languages %}
{% for lang_code, lang_name in languages %}
{% language lang_code %}
<a href="{% url 'home' %}" class="btn lang-btn {% ifequal request.LANGUAGE_CODE lang_code %}selected{% endifequal %}">{{lang_code|lang_name}}</a>
{% endlanguage %}
{% endfor %}
</div>
结果 url 像:/ja/
、/en/
、/fr/
等。
但是这种方法只链接到主页。
当对 url 使用 {{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>
它不包括 i18n url 模式..
有什么方法可以将电流 url 与 request.path 导通吗??
目标
在 /foo/
时:/ja/foo/
/en/foo/
/fr/foo/
在 /bar/
时:/ja/bar/
/en/bar/
/fr/bar/
提前致谢!
此 SO 问题中讨论了此主题:Django templates: Get current URL in another language。
在我的项目中,我使用这个简单的模板标签(取自 https://djangosnippets.org/snippets/2875/),它 returns 当前视图的 URL 另一种语言。
foo/templatetags/i18n_urls.py
:
from django import template
from django.urls 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>
请注意,translate_url
函数未记录在官方 Django 文档中。这是此函数的源代码:https://github.com/django/django/blob/master/django/urls/base.py#L161-L181.