एक फ्लास्क खाका के अंदर, मेरे पास है:फ्लास्क ब्लूप्रिंट का उपयोग करके, उपडोमेन निर्दिष्ट किए जाने पर url_for को तोड़ने से कैसे ठीक करें?
frontend = Blueprint('frontend', __name__)
और मेरी सूचकांक समारोह के लिए रास्ते में है:
@frontend.route('/')
def index():
#code
यह ठीक काम करता है लेकिन, मैं रूट करने के लिए एक उप डोमेन जोड़ने की कोशिश कर रहा हूँ, इसलिए जैसे:
@frontend.route('/', subdomain='<var>')
def index(var):
लेकिन इस एप्लिकेशन टूट जाता है और ब्राउज़र बाहर थूक (अन्य बातों के साथ):
+०१२३५१६४१०werkzeug.routing.BuildError
BuildError: ('frontend.index', {}, None)
frontend.index एक url_for ('frontend.index')
मैं कैसे url_for काम करने के लिए जब मैं एक उप डोमेन शामिल कर रहा हूँ प्राप्त कर सकते हैं में कुछ स्थानों में मेरी कोड में बाहर कहा जाता है? दस्तावेजों में केवल एक चीज मैं पा सकते हैं और मुझे लगता है कि प्रासंगिक हो सकता है यह है http://flask.pocoo.org/docs/api/ के तहत:
अनुप्रयोगों को एकीकृत करने के लिए, बोतल यूआरएल Flask.build_error_handler के माध्यम से त्रुटियों का निर्माण बीच में रोकने का एक हुक है। Url_for फ़ंक्शन परिणाम BuildError में जब वर्तमान ऐप में दिए गए एंडपॉइंट और मानों के लिए कोई URL नहीं है। जब ऐसा होता है, तो current_app अपने build_error_handler को कॉल करता है यदि यह कोई नहीं है, जो पर स्ट्रिंग को url_for के परिणाम के रूप में उपयोग कर सकता है ( BuildError अपवाद बढ़ाने के लिए url_for के डिफ़ॉल्ट के बजाय) या अपवाद को फिर से उठाएं। एक उदाहरण:
def external_url_handler(error, endpoint, **values):
"Looks up an external URL when `url_for` cannot build a URL."
# This is an example of hooking the build_error_handler.
# Here, lookup_url is some utility function you've built
# which looks up the endpoint in some external URL registry.
url = lookup_url(endpoint, **values)
if url is None:
# External lookup did not have a URL.
# Re-raise the BuildError, in context of original traceback.
exc_type, exc_value, tb = sys.exc_info()
if exc_value is error:
raise exc_type, exc_value, tb
else:
raise error
# url_for will use this result, instead of raising BuildError.
return url
app.build_error_handler = external_url_handler
हालांकि, मैं अजगर (और प्रोग्रामिंग) के लिए नया हूँ और समझ में नहीं आ सकते हैं, जहां मैं इस कोड डाल या कैसे मैं उस समारोह में जब एक builderror होता है कॉल करने के लिए मिलेगा।
किसी भी अंतर्दृष्टि बहुत सराहना की जाएगी :)
आप अपने url_for को जोड़ने की कोशिश की '' _external = True'' है() कहते हैं? –
@chrickso: मेरा जवाब देखें। ऐसा लगता है, आपको बस अलग-अलग विधि नाम प्रदान करने की आवश्यकता है। – pyfunc