gpt4 book ai didi

Flask shell - 如何为 url_for _external=True 设置服务器名称?

转载 作者:行者123 更新时间:2023-12-03 16:15:26 25 4
gpt4 key购买 nike

我有一个在 docker 容器中运行的 flask 应用程序。一切正常,除非我想在 Flask shell 的同一个 docker 容器中做一些手动工作。问题是 url_for(x, _external=True) 总是返回 https://localhost ,不管我如何尝试在 shell 中设置服务器名称。
我显然已经尝试将 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)

jinja 模板具有: {{ url_for('main.index', _external=True, _scheme='https') } }

产生:
https://localhost

我想得到:
https://example.com

我正在使用 Flask 0.11、Werkzeug 0.11.10 和 Jinja2 2.8

最佳答案

您的应用程序使用在创建应用程序上下文时定义的 SERVER_NAME

如果要在 shell 中进行,可以在设置 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/

我们可以深入 Flask 代码来理解它。

Flask url_for 使用 appctx.url_adapter 来构建这个 URL。这个 url_adapter是在 AppContext 初始化的时候定义的,它发生在shell启动的时候。它调用 app.create_url_adapter 并使用定义的 SERVER_NAME

关于Flask shell - 如何为 url_for _external=True 设置服务器名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37631886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com