首页 > 解决方案 > 在 Django 中设置语言切换按钮

问题描述

我是 Django 的新手,想要一些关于如何设置单个语言切换按钮以在两种语言(在本例中为英语和日语)之间切换的建议,特别是如何在视图中设置此功能并从一个模板。

在模板中,我得到了以下内容,但它包含表单和按钮的重复代码,这显然不是很好。

{% get_current_language as LANGUAGE_CODE %}
{% ifequal LANGUAGE_CODE 'en' %}
    <form action="{% url 'set_language' %}" method="post" id="form_{{ 'ja' }}" >
        {% csrf_token %}
        <input name="next" type="hidden" value="{{ redirect_to }}" />
        <input name="language" type="hidden" value="{{ 'ja' }}" />
    </form>
    <button class="btn btn-sm btn-outline-primary" type="submit" form="form_{{ 'ja' }}" value="Submit">日本語&lt;/button>
{% else %}
    <form action="{% url 'set_language' %}" method="post" id="form_{{ 'en' }}" >
        {% csrf_token %}
        <input name="next" type="hidden" value="{{ redirect_to }}" />
        <input name="language" type="hidden" value="{{ 'en' }}" />
    </form>
    <button class="btn btn-sm btn-outline-primary" type="submit" form="form_{{ 'en' }}" value="Submit">English</button>
{% endifequal %}

对于初学者的问题,我深表歉意,但我非常感谢一些关于如何将上述逻辑放入视图并从模板访问它的建议。提前致谢。

标签: django

解决方案


如果这对任何人都有用,我使用包含在我称为 language_selector.py 的文件中的自定义过滤器解决了这个问题,如下所示。

在 language_selector.py 中:

from django import template

register = template.Library()

@register.filter
def new_lang_code(current_lang_code):
    if current_lang_code == ‘en’:
        return ‘ja’
    else:
        return ‘en’

@register.filter
def new_lang_name(current_lang_code):
    if current_lang_code == ‘en’:
        return ‘日本語’
    else:
        return ‘English’

设置包含上述文件的模板标签目录。

app/
    __init__.py
    models.py
    templatetags/
        __init__.py
        language_selector.py
    views.py

在模板中:

{% load language_selector %}

⋮

<form action=“{% url ‘set_language’ %}” method=“post” id=“form_{{ LANGUAGE_CODE|new_lang_code }}” >
    {% csrf_token %}
    <input name=“next” type=“hidden” value=“{{ redirect_to }}” />
    <input name=“language” type=“hidden” value=“{{ LANGUAGE_CODE|new_lang_code }}” />
</form>
<button class=“btn btn-sm btn-outline-primary” type=“submit” form=“form_{{ LANGUAGE_CODE|new_lang_code }}” value=“Submit”&gt;{{ LANGUAGE_CODE|new_lang_name }}</button>

这很有效,并且似乎是实现语言切换按钮的一种简单而干净的方法,但是如果有更好的方法可以做到这一点,欢迎提出任何意见。


推荐阅读