我对Flask很新奇,因为它值得。我正在使用蓝图来分解我的代码,并试图使用Flask-Assets来提供资产链接。但出于某种原因,我无法让Flask-Assets在蓝图内工作。使用Flask-Assets的Flask特定资产在Flask中?
代码结构:
/modules
/base
__init__.py
__init__.py
/static
# ... stuff
/templates
/layout.html
在/modules/base/__init__.py:
from flask import Blueprint, render_template, request
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.assets import Environment, Bundle
from flask import current_app as app
default = Blueprint('base', __name__)
assets = Environment(app)
css = Bundle('css/bootstrap.min.css')
assets.register('css_all', css)
js = Bundle('js/jquery-1.7.2.min.js', 'js/bootstrap.min.js')
assets.register('js_all', js)
@default.route('/')
def index():
return render_template('index/index.html')
而且基地布局有这个在它:
{% assets "css_all" %}
<link rel="stylesheet" href="{{ ASSET_URL }}" />
{% endassets %}
{% assets "js_all" %}
<script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}
其实我在/modules/base/__init__.py中现在甚至不能工作,因为它会抛出“RuntimeError:在应用程序之外工作NTEXT”。如果我将资产代码移动到索引函数中,它确实有效,但每次我想要添加资源时都必须重复该代码似乎很奇怪。有一个更好的方法吗?我错过了什么吗?
编辑:每codecool的评论更新/modules/base/__init__.py,但现在它抛出一个“TemplateSyntaxError:遇到未知标签的资产'”的错误。我认为这是因为资产对象没有传递给应用程序。
编辑2:因此,采取从SQLAlchemy的是如何做的事情,我得到了这一些建议排序工作有以下:
在我的主要__init__.py:
from flask import Flask
from modules.base import default, assets as base_assets
from flask.ext.assets import Environment, Bundle
app = Flask(__name__)
app.register_blueprint(default)
base_assets.init_app(app)
在flask/__ init__.py: from flask导入Blueprint,render_template,请求从flask.ext.assets导入环境,请求 从flask导入current_app导入环境,Bundle 作为app
default = Blueprint('base', __name__)
assets = Environment(app)
css = Bundle('css/bootstrap2.min.css')
assets.register('css_all', css)
js = Bundle('js/jquery-1.7.2.min.js', 'js/bootstrap.min.js')
assets.register('js_all', js)
这里的技巧是在蓝图中创建资产,将其导入到基本init中,然后在那里调用.init_app。但是,如果发生这种情况,有两个蓝图可以做到这一点。最后一个总是胜出。也许它可以把这个拉出到一些通用的模块或什么..
我编辑了我的答案并解决了你的新问题。 – codecool 2012-07-10 06:11:12