Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django i18n-获取不同语言的当前路径_Python_Django_Django Templates_Django I18n_Django Template Filters - Fatal编程技术网

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

Python django i18n-获取不同语言的当前路径,python,django,django-templates,django-i18n,django-template-filters,Python,Django,Django Templates,Django I18n,Django Template Filters,我正在使用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="

我正在使用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>
它不包括i18n url模式

有没有办法用request.path来定向当前url

目标

/foo/
中时:
/ja/foo/
/en/foo/
/fr/foo/

/bar/
中时:
/ja/bar/
/en/bar/
/fr/bar/


提前谢谢

此问题中讨论了此主题:

在我的项目中,我使用这个简单的模板标记(取自),它以另一种语言返回当前视图的URL

foo/templatetags/i18n_url.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)
{% 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>
some_template.html

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)
{% 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>
{%load i18n_url%}

请注意,
translate\u url
功能未记录在Django官方文档中。以下是此函数的源代码:。

此问题将讨论此主题:

在我的项目中,我使用这个简单的模板标记(取自),它以另一种语言返回当前视图的URL

foo/templatetags/i18n_url.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)
{% 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>
some_template.html

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)
{% 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>
{%load i18n_url%}

请注意,
translate\u url
功能未记录在Django官方文档中。以下是此函数的源代码:。

我使用了您的代码并最终实现了它。当我清除
{%language%}
模板标记并只调整您的代码片段时,它就起作用了。谢谢我用了你的代码,终于成功了。当我清除
{%language%}
模板标记并只调整您的代码片段时,它就起作用了。谢谢