Многокомпонентная проблема с Jinja2 - PullRequest
4 голосов
/ 16 июня 2010

При создании шаблонов у меня обычно есть 3 отдельные части (заголовок, тело, нижний колонтитул), которые я объединяю для передачи одной строки на веб-сервер (в данном случае CherryPy).

Мой первый подход заключается в следующем:следует ...

from jinja2 import Environment, FileSystemLoader
env  = Environment(loader=FileSystemLoader(''))

tmpl = env.get_template('Body.html')
page_body = tmpl.render()

tmpl = env.get_template('Header.html')
page_header = tmpl.render()

tmpl = env.get_template('Footer.html')
page_footer = tmpl.render()

page_code = page_header + page_body + page_footer

, но это содержит повторяющийся код, поэтому мой следующий подход ...

def render_template(html_file):
    from jinja2 import Environment, FileSystemLoader
    env  = Environment(loader=FileSystemLoader(''))
    tmpl = env.get_template(html_file)
    return tmpl.render()

page_header = render_template('Header.html')
page_body   = render_template('Body.html')
page_footer = render_template('Footer.html)

Однако это означает, что каждая часть создается в своей собственной среде -это может быть проблемой?Есть ли другие недостатки этого подхода?

Я выбрал трехэлементный подход, а не дочерний шаблонный, потому что я думаю, что он может быть более гибким (и более легким для понимания), но я могу ошибаться.Кто-нибудь хотел бы убедить меня, что использование блоков заголовка, тела и нижнего колонтитула может быть лучше?

Любой совет будет оценен.Алан

1 Ответ

11 голосов
/ 16 июня 2010

Если вы не хотите выполнять наследование шаблонов, рассматривали ли вы include?

{% include 'header.html' %}
    Body
{% include 'footer.html' %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...