3

我有一个问题,我真的希望有人能阻止我把头撞到桌子上。

  • 我有一个带有多个蓝图的 Flask 应用程序,每个蓝图都有自己的静态和模板目录。
  • 当仅注册并使用一个蓝图时,捆绑的 CSS 和 Javascript 的资产 URL 均已正确解析
  • 然而,当两个或更多蓝图被解析时,只有最后注册的蓝图中资产的 URL 才能正确解析(其他一切似乎都认为它的资产应该从根静态目录中提供)

当来自蓝图的模板解析资产 URL 时,我得到不正确的资产 URL。解析的 URL 构建不正确,就好像它们应该从根静态目录提供一样(我仍然希望整个应用程序有一个静态目录,以便 400 和 500 错误可以使用该目录呈现页面):

http://{host}/static/public_css_app (404)

什么时候应该:

http://{host}/mod_core/static/public_css_app (200)

这是应用程序初始化的一部分

app = Flask(__name__)
# Import a module / component using its blueprint handler variable
# NOTE: The order that the Blueprints are imported in seems to relate to which one actual gets it's asset URLs rendered correctly. The last blueprint imported is the only one that works.
from appy.modules.core.controllers import mod_core
from appy.modules.auth.controllers import mod_auth

# Register blueprint(s)
appy.register_blueprint(mod_core)
appy.register_blueprint(mod_auth)

# Tried this method of setup and didn't do anything differently
# from flask.ext.assets import Bundle, Environment
# assets = Environment()
# assets.init_app(application)

以下是“{blueprint folder}/views.py”中的一个蓝图注册示例:

一张蓝图的观点:

mod_core = Blueprint('mod_core', __name__, url_prefix='/c',   template_folder='templates',  static_folder='static', static_url_path='/modules/core/static')
from . import bundles

另一个蓝图的观点:

mod_auth = Blueprint('mod_auth', __name__, url_prefix='/auth',   template_folder='templates',  static_folder='static', static_url_path='/modules/auth/static')
from . import bundles

这是 bundles.py 文件的示例(例如“/{blueprint_directory}/bundles.py”):

from appy import app
from flask import Flask
from flask.ext.assets import Bundle, Environment

bundles = {

   'public_js_app: Bundle(
        'mod_core/app/js/jquery.js',
        'mod_core/app/js/app.js',
        output='mod_core/b/app.js',
        filters='rjsmin'),

    'public_css_app': Bundle(
        'mod_core/app/css/style.css',
        'mod_core/app/font-awesome/css/font-awesome.css',
        output='mod_core/b/app.css',
        filters='cssmin'),
}

assets = Environment(app)
assets.register(bundles)

模板在技术上可以正常工作,使用url_for的静态文件也可以正常工作,只是资产解析不起作用。

{% assets "public_css_app" %}
<link rel="stylesheet" href="{{ ASSET_URL }}" type="text/css" />
{% endassets %}

任何帮助将不胜感激,因为我是 Flask 的新手。

4

0 回答 0