假设我的模板中包含{% block subject %}my subject{% endblock %}
之类的东西,并使用tmpl = loader.get_template('mytemplate.html')
加载此模板,如何提取“我的主题”?
最佳答案
当模板扩展基数时,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)
我真的不确定这是否是递归遍历所有节点的正确方法……但是在我有限的情况下它是可行的。