Flask - не удается найти шаблоны Blueprint в Google App Engine - PullRequest
2 голосов
/ 31 октября 2019

У меня есть модуль Python с планом, похожим на ...

import os
from flask import Blueprint


LIBRARY_BASE_DIR = os.path.dirname(os.path.abspath(__file__))
TEMPLATE_BASE_DIR = os.path.join(LIBRARY_BASE_DIR, 'templates')
STATIC_BASE_DIR = os.path.join(LIBRARY_BASE_DIR, 'static')


BulmaBase = Blueprint(
    'bulma',
    __name__,
    url_prefix='/bulma',
    static_url_path='/bulma-static',
    static_folder=STATIC_BASE_DIR,
    template_folder=TEMPLATE_BASE_DIR,
)

Зарегистрировано в приложении Flask в другом модуле routes.py

app = Flask(__name__)
app.register_blueprint(BulmaBase)

ПланБазовый шаблон я хочу расширить в нескольких приложениях.

{% extends 'bases/bulma/bulma.html' %}

Файл main.py запускает приложение через WSGI. В файле Google App Engine app.yaml нет точки входа в списке (поэтому он должен использовать значение по умолчанию, main: app).

application.run(host='127.0.0.1', debug=DEBUG)

Все отлично работает при локальном запуске. Однако после запуска в Google App Engine шаблоны в Blueprint не могут быть найдены. Если я отключу Blueprint, приложение снова запустится на GAE.

jinja2.exceptions.TemplateNotFound: bases/bulma/bulma.html
at _get_source_fast (/env/lib/python3.7/site-packages/flask/templating.py:86)
at get_source (/env/lib/python3.7/site-packages/flask/templating.py:58)
at load (/env/lib/python3.7/site-packages/jinja2/loaders.py:113)
at _load_template (/env/lib/python3.7/site-packages/jinja2/environment.py:804)
at get_template (/env/lib/python3.7/site-packages/jinja2/environment.py:830)
at root (/srv/auth_app/templates/BASE.html:11)
at root (/srv/auth_app/templates/login__firebase_ui.html:14)
at render (/env/lib/python3.7/site-packages/jinja2/environment.py:1005)
at top-level template code (/srv/auth_app/templates/login__firebase_ui.html:1)
at reraise (/env/lib/python3.7/site-packages/jinja2/_compat.py:37)
at handle_exception (/env/lib/python3.7/site-packages/jinja2/environment.py:780)
at render (/env/lib/python3.7/site-packages/jinja2/environment.py:1008)
at render (/env/lib/python3.7/site-packages/jinja2/asyncsupport.py:76)
at _render (/env/lib/python3.7/site-packages/flask/templating.py:117)
at render_template (/env/lib/python3.7/site-packages/flask/templating.py:135)
at login (/srv/auth_app/routes.py:64)
at dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1799)
at full_dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1813)
at reraise (/env/lib/python3.7/site-packages/flask/_compat.py:35)
at handle_user_exception (/env/lib/python3.7/site-packages/flask/app.py:1718)
at full_dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1815)
at wsgi_app (

Понятия не имею, как решить эту проблему. В конце я хотел бы иметь общий расширяемый шаблон (со связанными активами), который несколько других людей могут расширять в своих собственных приложениях. Любые указатели будут с благодарностью.

1 Ответ

1 голос
/ 03 ноября 2019

Это больше не проблема после обновления службы Google App Engine из стандартной среды в гибкую среду.

Из документов -

Apps in the flexible environment can serve static files from a Google Cloud Platform option like Cloud Storage, serve them directly, or use a third-party content delivery network (CDN).

В случае неудачи стандартная среда не допускает возможность доступа / записи не- запускать файлы из внешних библиотек;можно использовать только папку tmp, если в app.yaml не указана конкретная статическая папка. Это проявляется, если приложение пытается использовать какие-либо шаблоны из внешней библиотеки, как ошибку при поиске шаблона в файловой системе.

Короче говоря, если у вас есть внешние библиотеки и вы хотите использовать шаблоны / статическиефайлы из них в производстве (например, с Flask Blueprint), тогда стандартная среда GAE не будет работать, насколько я могу судить.

...