Настройка jinja2 из колбы для использования FileSystemLoader - PullRequest
0 голосов
/ 21 ноября 2018

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

Фон

приложение фляги структурировано какэто:

/flaskapp
- routes.py
- table_func.py
- froms.py
- /static
    - /css
        - index.css
- /templates
    page.html

page.html использует шаблонизатор jinja2 с флягой для отображения таблиц, которые созданы и стилизованы с помощью панд, а также отображает формы, которые я использую для создания колбы-WTF.

Он спроектирован таким образом, что HTML остается неизменным, а содержимое изменяется на основе таблиц, которые отправляются в HTML с использованием шаблонов jinja2, например:

<div class="block">
        <div class="table1">
            {{ title | safe }}
        </div>
        <div class = "table2">
            {{ table | safe }}
        </div>
    </div>

    <br><br>

    <div class="block">
        <div class="table1">
            {{ title | safe }}
        </div>
        <div class="table2">
            {{ heat | safe }}
        </div>
    </div>

Причина нескольких деленийиспользуется для макета

выпуск

после упаковки приложения фляги с помощью pyinstall оно будет возвращать и отображать только страницы, которые не используют систему шаблонов jinja2, любыена страницах, использующих шаблоны jinja2, выдается ошибка NotImplementedError: Can't perform this operation for unregistered loader type

Так что после большого количества исследований и испытаний я почти уверен, что это связано с тем, что движок шаблонов jinja2 в колбе не поддерживается pyinstaller,особенно из-за того, что jinja2 использует API PackageLoader, как показано здесь

https://github.com/pyinstaller/pyinstaller/issues/1898
pyinstaller issue 183 seems to suggest this isn't an issue, but it still is since it isn't working]

, через дальнейшее копание через переполнение стека и документы jinja2, кажется, что лучшим решением является использование API FileSystemLoader jinja2 вместо PackageLoader.

https://stackoverflow.com/questions/38642557/how-to-load-jinja-template-directly-from-filesystem

https://stackoverflow.com/questions/38617900/need-to-package-jinja2-template-for-python

http://jinja.pocoo.org/docs/2.10/api/#loaders

Я предполагаю, что как только я преобразую это, это позволит pyinstaller упаковать приложение фляги и перестанет выдавать ошибки при попытке загрузить страницу с использованием шаблонов jinja2.

Но я не совсем уверен, как поступить с этого момента, как мне сказать, чтобы flask использовал другой загрузчик в jinja2 при вызове render_template()

Я предполагаю, что у flask есть какой-то способ настройки jinja2?

...