Tôi khá mới với Flask, cho những gì nó có giá trị. Tôi đang sử dụng bản thiết kế để chia nhỏ mã của mình và đang cố sử dụng Flask-Assets để phân phát các liên kết nội dung. Vì một lý do nào đó, tôi không thể lấy Flask-Assets để làm việc trong kế hoạch chi tiết.Tài sản chi tiết cụ thể trong Flask sử dụng Flask-Assets?
cấu trúc Mã số:
/modules
/base
__init__.py
__init__.py
/static
# ... stuff
/templates
/layout.html
Trong /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')
Và cách bố trí cơ sở có này trong đó:
{% assets "css_all" %}
<link rel="stylesheet" href="{{ ASSET_URL }}" />
{% endassets %}
{% assets "js_all" %}
<script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}
Trên thực tế những gì tôi có trong /modules/base/__init__.py ngay bây giờ thậm chí không hoạt động, vì nó ném "RuntimeError: làm việc bên ngoài ứng dụng co ntext ". Nếu tôi di chuyển mã tài sản vào hàm chỉ mục nó hoạt động, nhưng có vẻ lạ khi phải lặp lại mã đó mỗi lần tôi muốn thêm nội dung. Có cách nào tốt hơn để làm điều này? Tui bỏ lỡ điều gì vậy?
Edit: /modules/base/__init__.py cập nhật mỗi comment codecool, nhưng bây giờ nó ném một "TemplateSyntaxError: Gặp thẻ vô danh 'tài sản'" lỗi. Tôi nghĩ rằng điều này là bởi vì các đối tượng tài sản không nhận được thông qua thông qua các ứng dụng.
Chỉnh sửa 2: Vì vậy, tham gia một số lời khuyên từ cách SQLAlchemy làm điều gì đó, tôi nhận này để sắp xếp công việc như sau:
Trong __init__.py chính của tôi:
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)
Trong cơ sở/__ init__.py: từ nhập khẩu bình đồ Blueprint, render_template, yêu cầu từ flask.ext.assets nhập khẩu Môi trường, Gói từ bình nhập current_app làm ứng dụng
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)
Bí quyết ở đây là tạo nội dung trong kế hoạch chi tiết, nhập nó vào init cơ sở, sau đó gọi .init_app tại đó. Tuy nhiên, trong trường hợp này, có hai bản thiết kế thực hiện điều này. Người cuối cùng được gọi là luôn thắng. Có lẽ nó sẽ có thể để kéo này ra vào một số mô-đun phổ biến hoặc một cái gì đó ..
Tôi đã chỉnh sửa câu trả lời của mình với giải pháp cho vấn đề mới của bạn. – codecool