Kyu*_*ark 1 python django django-templates django-template-filters django-i18n
我正在使用 Django 并开发一个支持多种语言的 i18n 站点。我想制作一个停留在 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>
Run Code Online (Sandbox Code Playgroud)
果然像网址:/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>
Run Code Online (Sandbox Code Playgroud)
它不包括 i18n url 模式..
有没有办法用 request.path 引导当前的 url?
目标
当在/foo/:/ja/foo/ /en/foo/ /fr/foo/
当在/bar/:/ja/bar/ /en/bar/ /fr/bar/
提前致谢!
这个主题在这个 SO 问题中讨论:Django 模板:以另一种语言获取当前 URL。
在我的项目中,我使用了这个简单的模板标签(取自https://djangosnippets.org/snippets/2875/),它以另一种语言返回当前视图的 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)
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
请注意,该translate_url函数未记录在官方 Django 文档中。这是该函数的源代码:https : //github.com/django/django/blob/master/django/urls/base.py#L161-L181。
| 归档时间: |
|
| 查看次数: |
1689 次 |
| 最近记录: |