Я бы хотел визуализировать только определенный блок шаблона Jinja2. Предположим, например, что я использую Jinja2 для сообщений электронной почты, и у меня есть блок с именем subject и блок с именем body , представляющие эти части сообщения электронной почты соответственно.
У меня может быть шаблон base (base.html
), например:
{% block subject %}Message Form Us{% endblock %}
{% block body %}
{% block content %}INSERT CONTENT HERE{% endblock %}
----
Thanks for reaching out.
{% endblock %}
Тогда у меня может быть welcome.html
шаблон:
{% extends 'base.html' %}
{% block content %}
Hello and welcome.
{% endblock %}
Обратите внимание, что welcome.html
расширяет base.html
и изменяет только вложенный блок content
, оставляя subject
и body
нетронутыми.
К сожалению, если вы загрузите этот шаблон и попытаетесь найти блоки subject
или body
, они не будут видны в Jinja2 API:
env = jinja2.Environment(
loader=jinja2.PackageLoader('my_package'))
template = env.get_template('welcome.html')
print(template.blocks) # Only has a key for 'content`, no 'body' or 'subject'
Что бы я хотел сделать, это что-то вроде этого, но это приведет к KeyError:
my_email_template = env.get_template('welcome.html')
context = template.new_context(vars)
subject = jinja2.utils.concat(template.blocks['subject'](context))
body = jinja2.utils.concat(template.blocks['body'](context))
Есть рекомендации?