当前位置: 首页 > 知识库问答 >
问题:

Django模板:获取另一种语言的当前URL

劳英华
2023-03-14

我正在使用i18n_patterns在Django应用程序中创建语言前缀。

我的网址如下所示:

/de/contact/
/fr/contact/
/it/contact/

在我的基本模板中,我循环了所有可用的语言来显示语言切换链接。

{% 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。有没有办法获取当前页面的翻译URL?

如果我在德语版的“联系人”页面上,我希望“fr”链接指向法语版本的“联系人”页面,而不是“主页”页面。

共有3个答案

秋阳荣
2023-03-14

这个片段应该这样做:

https://djangosnippets.org/snippets/2875/

将其添加为自定义模板标记后,可以执行以下操作:

公羊渝
2023-03-14

我觉得值得一提的是,有一个内置函数叫做< code>translate_url。

from django.urls import translate_url
translate_url(url, lang_code)
孔鸿宝
2023-03-14

我没有使用语言前缀,而是使用翻译的网址。但是,此模板标记还应该可以帮助您:

# 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)

它以期望的语言返回当前的url。像这样使用:< code>{% translate_url de %}

欢迎提出改进意见和建议。

 类似资料:
  • 问题内容: 我想知道如何在模板中获取当前URL。 说我目前的网址是: 如何将其返回到模板? 问题答案: Django 1.9及更高版本: 旧:

  • X2.2.0新增 sp_check_lang() 功能: 判断当前的语言包,并返回语言包名 参数: 无 返回: 类型string 包名,如:zh-cn 使用: $lang=sp_check_lang();

  • 接下来,我们会详细描述 Django 内置模板语言的语法 (DTL),和 Mako、Jinja2 一样,需要掌握其注释、变量、过滤器、标签、控制语句等等的写法,并用实际的案例进行说明。 1. DTL 基础用法 1.1 变量 DTL 中变量的写法为 {{ variable }}, 这和 Jinja2 非常类似。模版引擎碰到模板变量时,会从上下文 context 中获取这个变量的值,然后用该值替换掉它

  • cmf_get_current_theme() 功能 获取当前前台模板 参数 无 返回 string

  • 问题内容: 有没有办法在Django模板中获取当前页面的URL及其所有参数? 例如,一个模板标签将显示完整的网址,例如 问题答案: 编写自定义上下文处理器。例如 在设置变量中添加该函数的路径,然后在模板中使用它,如下所示: 如果要在每个请求中都有完整的对象,则可以使用内置的上下文处理器,然后在模板中使用。

  • cmf_get_current_admin_theme() 功能 获取当前后台模板 参数 无 返回 string