Вызовите другой тег шаблона, который использует @ register.inclusion_tag - PullRequest
1 голос
/ 03 мая 2011

Я использую пользовательский тег шаблона, который вызывает другой, в зависимости от того, какой час.

@register.simple_tag(takes_context=True)
def my_custom_template_tag(context):
"""
"""
now = datetime.now()

# if the current hour:minute is less than
# the publication switch settings defined hour
if now.strftime('%H:%M') <= settings.PUBLICATION_SWITCH_TIME:
    print now.strftime('%H:%M')
    return my_other_template_tag(context)
else:
    pass

@register.inclusion_tag('my_other_template_tag_template_path', takes_context=True)
def my_other_template_tag(context):
"""

"""
return {
    'foo'
}

проблема в том, что my_custom_template_tag, похоже, игнорирует вызываемый my_other_template_tag @inclusion_tag.Есть ли способ достичь этого, продолжая использовать @inclusion_tag ??

Спасибо!

1 Ответ

2 голосов
/ 30 июня 2011

У меня была немного другая проблема, и я хотел отобразить тег шаблона в своих представлениях, поэтому я написал вспомогательную функцию, которая позволила бы мне это сделать. Вариант этого также должен работать для рендеринга внутри simple_tag. Вот помощник:

def render_templatetag(request, tag_string, tag_file, dictionary=None):
    dictionary = dictionary or {}
    context_instance = RequestContext(request)
    context_instance.update(dictionary)
    t = Template("{%% load %s %%}{%% %s %%}" % (tag_file, tag_string))
    return t.render(context_instance)

Он просто создает шаблон на лету, который загружает нужный файл тега и имеет используемый тэг template_tag. Для использования в simple_tag вы можете изменить функцию и заменить аргумент запроса контекстом.

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