Jinja2 - Как передать функцию в динамически создаваемый шаблон - PullRequest
0 голосов
/ 28 апреля 2020

Вот как я создаю свой html файл:

#html_report.py
values_params = # A dict from a .json file

analysis_template   = report_env.get_template('analysis.html')
section_template    = report_env.get_template('section.html')

values_section = {
    'record_nature' : values_params['record_nature'],
    'row_count'     : # some query function
    'analyses'      : values_params['analyses'],
    'table_example' : pdh.query_to_dataframe(values.count_by_types()).to_html()
}

sections = list()
sections.append(section_template.render(values_section))

with open(output_path + analysis_filename, 'w') as f:
    f.write(analysis_template.render(
        sections = sections
    ))

Вот так выглядит файл .json, как будто я считываю свои параметры в values_params:

"values" : {
        "record_nature" : "output of a certain device with a timestamp and value",
        "analyses" : [
            {
                "x" : "tpye",
                "y" : "measures",
                "table" : // this is where a query function would go
            }
        ]
    },

analysis.html имеет все oop, например:

<body>
    {% for section in sections %}
        {{ section }}
    {% endfor %}
</body>

Здесь sections_template оценивается после добавления к основному analysis_template

section.html встроенный l oop тоже:

<h3>
    {% for a in analyses %}
        {{ a.y }} distribution on {{ a.x }}
        {{ a.table }}
    {% endfor %}
</h3>

Дело в том, что у меня есть функции с результатами запросов из базы данных, которые я могу легко передать в объявленный вручную шаблон.

Однако с встроенные части, я не знаю, как передать, например, реальную функцию, которая нужна a.table. Я добавил одно внешнее поле 'table_example', в котором показан пример функции генератора таблиц html.

Я знаю, что это много кода, но для подведения итогов это проблема:

template rendering -> pass function into manually declared template -> pass function into dynamically created sub-templates.

Кто-нибудь с большим опытом имеет понимание?

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