3

Flask のデフォルトの static/ ディレクトリの外にある Flask-Assets を使用してアセットをバンドルするにはどうすればよいですか?

  • npm installアセットをダウンロードしていますbower_components/
  • に存在する他のJavaScriptがありますjavascripts/
  • Flasks アプリのファクトリ パターンを使用していますが、Flask-Assets をどのように構成しようとしても、assets instance not bound to an application, and no application in current context例外を回避できません。

特に、アプリの static/ ディレクトリの外で生のアセットとパッケージ化されたアセットを管理する方法の例を教えていただければ幸いです:P

アプリの構造

app/
    static/
    __init__.py
    assets.py
javascripts/
    app.js
bower_components/
    jquery.js
    jquery,pjax,js

app/assets.py

from flask.ext.assets import Bundle, Environment

js = Bundle(
    'bower_components/jquery.js',
    'bower_components/jquery.pjax.js',
    'javascripts/app.js'
    filters='jsmin',
    output='static/packed.js'
)

assets = Environment()

assets.register('js_all', js)

アプリ/初期化.py

from flask import Flask
from app.assets import assets

app = Flask(__name__)
assets.init_app(app)
4

1 に答える 1

1

Flask-Assets のソースを確認したところ、FlaskResolverクラスのドキュメント文字列でこれが見つかりました。

aEnvironment.load_pathが設定されている場合、ソース ファイルの検索に使用され、Flask システムが置き換えられます。ブループリントのプレフィックスは解決されなくなりました。

したがって、app/init.py で次のことを行う必要があります。

from os.path import abspath, join

app = Flask(__name__)
assets.load_path = abspath(join(app.root_path, '..'))
assets.init_app(app)
于 2013-11-09T10:33:46.350 に答える