Как отобразить только определенный блок в Jinja2, особенно один из родительского шаблона? - PullRequest
0 голосов
/ 15 апреля 2019

Я бы хотел визуализировать только определенный блок шаблона 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))

Есть рекомендации?

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