Я получил это далеко:
>>> some_template = get_template_from_string(
... load_template_source(
... 'some_template.html',
... settings.TEMPLATE_DIRS))
...
>>> blocks = some_template.nodelist.get_nodes_by_type(BlockNode)
>>> blocks[0]
<Block Node: another_block. Contents: [<Text Node: '\nThis one is really cool'>, <Block Node: sub_block. Contents: [<Text Node: '\nI\'m a sub-block.\n\t'>]>, <Text Node: '\n'>]>
>>> # Right there is when I realized this wasn't going to be fun.
Видите ли, содержимое блока содержится в block.nodelist
, а не просто текст. Если у меня есть шаблон:
{% extends "base.html" %}
{% block some_block %}
Some value
{% endblock %}
{% block other_block %}
Other Value
{% sub_block %}Sub block value{% endblock %}
{% endblock %}
Я хочу иметь возможность сделать это:
>>> get_block_source('other_block')
'\nOther Value\n {% sub_block %}Sub block value{% endblock %}\n'
>>> get_block_source('sub_block')
'Sub block value'
Если внутренние компоненты Django не предоставляют достаточно ресурсов, чтобы найти способ сделать это, я тоже согласен с использованием регулярных выражений / серий регулярных выражений, но я не понимаю, как это было бы возможно с помощью одного регулярного выражения при условии, что вы можете иметь вложенные теги {% block...
.