Django: Как я могу получить блок от шаблона?

Предположим, что мой шаблон имеет в нем что-то как {% block subject %}my subject{% endblock %} и я загружаю этот шаблон tmpl = loader.get_template('mytemplate.html'), как я могу извлечь "свой предмет"?

7
задан mpen 21 April 2010 в 23:09
поделиться

2 ответа

Решение Camilo не работает, когда ваш шаблон расширяет базу. Я немного изменил его, чтобы (надеюсь) исправить эту проблему:

from django.template import Context
from django.template.loader import get_template
from django.template.loader_tags import BlockNode, ExtendsNode

def _get_node(template, context=Context(), name='subject'):
    for node in template:
        if isinstance(node, BlockNode) and node.name == name:
            return node.render(context)
        elif isinstance(node, ExtendsNode):
            return _get_node(node.nodelist, context, name)
    raise Exception("Node '%s' could not be found in template." % name)

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

6
ответ дан 6 December 2019 в 09:59
поделиться
from django.template import Context
from django.template.loader import get_template
from django.template.loader_tags import BlockNode

t = get_template('template.html')
for node in t:
    if isinstance(node, BlockNode) and node.name == 'subject':
        print node.render(Context())

У меня это сработало, используя Django 1.1.1

5
ответ дан 6 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: