Какую структуру генерировать отчеты, используя Jinja2? - PullRequest
0 голосов
/ 31 марта 2019

У меня есть несколько Python в записных книжках Jupyter, которые создают сводные таблицы и некоторые графики из данных. Теперь я хочу сделать отчеты в формате PDF из этих данных, и я собираюсь сделать HTML с помощью Jinja2 и преобразовать его в PDF.

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

Какой лучший способ добиться этого?

1 Ответ

0 голосов
/ 31 марта 2019

Добрый вечер,

В вашем случае я бы сделал папку с вашими шаблонами.

Например:

templates
|- base.html
|- my_template.html
|- another_template.html

Включить

Решение заключается в использовании include:

Например, в вашем base.html вы бы имели:

<html>

<head>

</head>

<body>
{% include ['my_template.html', 'another_template.html'] %}
</body>

</html>

Здесь мы включаем результаты рендеринга my_template.html и another_template.html в ваш шаблон base.html.

Вы должны будете предоставить своей функции рендеринга все параметры, необходимые для всех HTML-шаблонов, которые вы хотите рендерить.

Расширяется

С jinja2 вы также можете делать то, что хотите, используя емкость extends.

Итак, допустим, у вас есть шаблон base.html типа:

<html>

<head>

</head>

<body>
{% block core %}
{{ content }}
{% endblock %}

</body>

</html>

Здесь у нас есть блок с именем core.

Затем вы можете в другом шаблоне расширить базовый шаблон и заменить core block чем-то другим, например:

{% extends "base.html" %}
{% block core %}
<h1>Hello world</h1>
{% endblock %}

К сожалению, как вы можете видеть, это означает, что если вы хотите различныеКуски HTML вам придется сделать несколько extends.

У вас может быть другой шаблон, который будет расширять предыдущий шаблон, который расширяет базовый.

Руководство

Последнее решение, которое, на мой взгляд, не рекомендуется, но ради него я буду выставлять здесь:

Имеет base.html вида:

<html>

<head>

</head>

<body>
{% for html in list_html_to_render %}
{{ html }}
{% endfor %}
</body>

</html>

Тогда мы больше не используем Jinja2 в этом случае, но мы визуализируем каждый html, содержащийся в list_html_to_render, передаваемый в функцию рендеринга.

Надеюсь, это поможет.

Хорошего дня,

Мои наилучшие пожелания.

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