Настройка кнопки переключения языка в Django - PullRequest
2 голосов
/ 12 июля 2020

Я новичок в Django и хотел бы получить совет о том, как настроить кнопку переключения одного языка для переключения между двумя языками (английский sh и японский в данном случае), и, в частности, как настроить это функциональность в представлении и доступ к нему из шаблона.

В шаблоне я пришел к следующему, который работает, но включает повторяющийся код для формы и кнопки, что явно не очень хорошо.

{% 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">日本語</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 %}

Приношу свои извинения за вопрос новичка, но я бы очень признателен за совет относительно того, как поместить вышеуказанный logi c в представление и получить к нему доступ из шаблона. Заранее спасибо.

1 Ответ

0 голосов
/ 14 июля 2020

Если это кому-то полезно, я решил эту проблему следующим образом, используя настраиваемый фильтр, включенный в файл, который я назвал 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”>{{ LANGUAGE_CODE|new_lang_name }}</button>

Это работает и кажется простым и понятным способом реализации языка - кнопку переключения, но любые комментарии приветствуются, если есть более эффективные способы сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...