/ / फ्लास्क शेल - url_for _external = True के लिए सर्वर नाम कैसे सेट करें? - फ्लास्क, जिंजा 2

फ्लास्क खोल - url_for _external = True के लिए सर्वर नाम कैसे सेट करें? - फ्लास्क, जिन्जा 2

मेरे पास एक डॉक कंटेनर में एक फ्लास्क ऐप है। सभी ठीक काम करता है, सिवाय इसके कि जब मैं फ्लास्क शेल से उसी डॉकटर कंटेनर में कुछ मैनुअल काम करना चाहता हूं। समस्या यह है कि 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.