/ / Flask Shell - wie kann ich den Servernamen für url_for _external = True setzen - Kolben, jinja2

Flask Shell - Wie setze ich den Servernamen für url_for _external = True? - Flasche, Jinja2

Ich habe eine Flaschen-App, die in einem Docker-Container ausgeführt wird. Alles funktioniert gut, außer wenn ich einige manuelle Jobs in demselben Docker-Container von der Kolbenhülle aus erledigen möchte. Das Problem ist, dass die url_for(x, _external=True) kommt immer zurück https://localhostspielt keine Rolle, wie ich versuche, den Servernamen in der Shell festzulegen. Ich habe natürlich versucht, den SERVER_NAME auf keine Änderung zu setzen.

$ 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)

Die Jinja-Vorlage hat: {{ url_for("main.index", _external=True, _scheme="https") }}

Was erzeugt: https://localhost

Ich hätte gern: https://example.com

Ich benutze Flask 0.11, Werkzeug 0.11.10 und Jinja2 2.8

Antworten:

4 für die Antwort № 1

Ihre App verwendet die SERVER_NAME definiert, wann der Anwendungskontext erstellt wurde.

Wenn Sie dies in einer Shell tun möchten, können Sie einen Testanforderungskontext erstellen, nachdem Sie das festgelegt haben 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/

Wir können in Flask-Code graben, um es zu verstehen.

Flasche url_for nutzt die appctx.url_adapter um diese URL zu erstellen. Diese url_adapter ist definiert, wenn der AppContext wird initialisiert und passiert, wenn die Shell gestartet wird. Es nennt das app.create_url_adapter und es verwendet das definierte SERVER_NAME.