получить контекст запроса в дополнительных пользовательских шаблонных тегах - PullRequest
0 голосов
/ 02 сентября 2018

В Django простые теги и шаблоны включения позволяют получить контекст запроса с помощью

@register.simple_tag(takes_context=True)

Официальная документация для пользовательских тегов шаблонов - теги включения .

Однако для пользовательских тегов я не вижу, как это делается.

Я пытаюсь расширить тег i18n {% trans %}, чтобы сначала найти перевод в базе данных, прежде чем использовать gettext. Мне нужен доступ к request.Language из пользовательского тега шаблона.

1 Ответ

0 голосов
/ 13 сентября 2018

Из документа Django пользовательских тегов шаблонов также можно добавить takes_context для таможенных тегов

import datetime
from django import template

register = template.Library()


@register.simple_tag(<b>takes_context=True</b>)
def current_time(<b>context</b>, format_string):

    #use <b>"context"</b> variable here
    return datetime.datetime.now().strftime(format_string)


Я не уверен, как переопределить существующий тег в этом конкретном сценарии :(
В любом случае, я предлагаю создать simple_tag, который берет контекст и выполняет вашу логику внутри тега и возвращает текст перевода из БД. Если его нет в БД, верните логическое значение False. Теперь в шаблоне проверьте это с помощью тега if.

from django import template

register = template.Library()


@register.simple_tag(takes_context=True)
def is_db_available(context):
    # access your context here and do the DB check and return the translation text or 'False'
    if translation_found_in_DB:
        return "Some translation text"
    return False

и в шаблоне

{% load custom_tags %}
{% load i18n %}
{% is_db_available as check %} 
{% if check %}  <!-- The if condition  -->
    {{ check }}
{% else %}
    {% trans "This is the title." %} <!-- Calling default trans tag  -->
{% endif %}
...