使用多个蓝图时,Flask-Assets或Bundles不会重新保存正确的URL

时间:2015-11-04 18:05:17

标签: python flask flask-assets

我有一个问题,我真的希望有人可以阻止我对抗桌子。

  • 我有一个带有多个蓝图的Flask应用程序,每个蓝图都有自己的静态和模板目录。
  • 当只注册并使用一个Blueprint时,捆绑的CSS和Javascript的资产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的新手。

0 个答案:

没有答案