मेरे पास एक डॉक कंटेनर में एक फ्लास्क ऐप है। सभी ठीक काम करता है, सिवाय इसके कि जब मैं फ्लास्क शेल से उसी डॉकटर कंटेनर में कुछ मैनुअल काम करना चाहता हूं। समस्या यह है कि url_for(x, _external=True)
हमेशा देता है https://localhost, "कोई बात नहीं है कि मैं शेल में सर्वर नाम कैसे सेट करने का प्रयास करता हूं। मैंने स्पष्ट रूप से SERVER_NAME को बिना किसी परिवर्तन के सेट करने का प्रयास किया है।
$ python manage.py shell
>>> from flask import current_app
>>> current_app.config["SERVER_NAME"] = "example.com"
>>> from app import models
>>> models.Registration.send_registration(id=123)
जिन्जा टेम्पलेट है:
{{ url_for("main.index", _external=True, _scheme="https") }
}
जो उत्पन्न करता है: https://localhost
मैं लेना चाहता हूँ: https://example.com
मैं फ्लास्क ०.११, विर्केजग ०.११.१० और जिन्जा २.२ का उपयोग कर रहा हूं
उत्तर:
उत्तर № 1 के लिए 4आपका ऐप उपयोग करता है SERVER_NAME
जब अनुप्रयोग संदर्भ बनाया गया था।
यदि आप इसे शेल में करना चाहते हैं, तो आप सेट करने के बाद एक परीक्षण अनुरोध संदर्भ बना सकते हैं SERVER_NAME
.
>>> from flask import current_app, url_for
>>> current_app.config["SERVER_NAME"] = "example.com"
>>> with current_app.test_request_context():
... url = url_for("index", _external=True)
...
>>> print url
http://example.com/
हम इसे समझने के लिए फ्लास्क कोड में खुदाई कर सकते हैं।
कुप्पी url_for
का उपयोग करता है appctx.url_adapter
इस URL को बनाने के लिए। इस url_adapter
परिभाषित किया गया है जब AppContext
आरंभिक है, और यह तब होता है जब शेल शुरू किया जाता है। यह कहता है app.create_url_adapter
और यह परिभाषित का उपयोग करता है SERVER_NAME
.