मैं फ्लास्क के लिए काफी नया हूं, इसके लिए क्या लायक है। मैं अपने कोड को तोड़ने के लिए ब्लूप्रिंट का उपयोग कर रहा हूं और संपत्ति लिंक की सेवा के लिए फ्लास्क-एसेट्स का उपयोग करने की कोशिश कर रहा हूं। किसी कारण से, हालांकि, मुझे ब्लूप्रिंट के भीतर काम करने के लिए फ्लास्क-एसेट्स नहीं मिल सकते हैं।फ्लास्क-एसेट्स का उपयोग कर फ्लास्क में ब्लूप्रिंट-विशिष्ट संपत्तियां?
कोड संरचना:
/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 में अभी भी काम नहीं करता है, क्योंकि यह "रनटाइम त्रुटि: अनुप्रयोग सह के बाहर काम कर रहा है 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)
आधार/__ init__.py: फ्लास्क आयात से ब्लूप्रिंट, render_template, अनुरोध flask.ext.assets आयात पर्यावरण, बंडल फ्लास्क आयात current_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