我對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