У меня есть пакет, содержащий статические файлы, которые я хочу повторно использовать в приложениях.Основываясь на https://webassets.readthedocs.io/en/latest/environment.html#webassets.env.Environment.load_path, я придумал следующий фрагмент кода, который будет использоваться в __init__.py
каждого приложения (общий пакет loutilities
):
with app.app_context():
# js/css files
asset_env.append_path(app.static_folder)
# os.path.split to get package directory
asset_env.append_path(os.path.join(os.path.split(loutilities.__file__)[0], 'tables-assets', 'static'))
, но когда ASSETS_DEBUG = False
это вызывает исключение ValueError для одного из файлов, найденных в пакете.(См. https://github.com/louking/rrwebapp/issues/366 для подробной трассировки - это, возможно, связано с https://github.com/miracle2k/webassets/issues/387).
ValueError: Cannot determine url for /var/www/sandbox.scoretility.com/rrwebapp/lib/python2.7/site-packages/loutilities/tables-assets/static/branding.css
Изменен код для использования параметра URL, который теперь отлично работает для ASSETS_DEBUG = False
asset_env.append_path(os.path.join(os.path.split(loutilities.__file__)[0], 'tables-assets', 'static'), '/loutilities')
однако теперь, когда ASSETS_DEBUG = True
, я вижу, что файл не удалось загрузить в консоль javascript
Failed to load resource: the server responded with a status of 404 (NOT FOUND) branding.css
Работали вокруг Catch-22 с использованием неэлементного кода следующим образом, но не знаю, как выбрать параметр append_path()
url
, который будет работать как для ASSETS_DEBUG = True
, так и для False
.
with app.app_context():
# js/css files
asset_env.append_path(app.static_folder)
# os.path.split to get package directory
loutilitiespath = os.path.split(loutilities.__file__)[0]
# kludge: seems like assets debug doesn't like url and no debug insists on it
if app.config['ASSETS_DEBUG']:
url = None
else:
url = '/loutilities'
asset_env.append_path(os.path.join(loutilitiespath, 'tables-assets', 'static'), url)