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

Flask shell-如何为_external=True的url_设置服务器名称?,flask,jinja2,Flask,Jinja2,我有一个烧瓶应用程序在docker容器中运行。除了我想从flask shell在同一个docker容器中执行一些手动操作外,所有操作都很好。问题是,(x,_external=True)的url\u总是返回,不管我如何在shell中设置服务器名称。 显然,我已尝试将服务器名称设置为无更改 $ python manage.py shell >>> from flask import current_app >>> current_app.config['SERVE

我有一个烧瓶应用程序在docker容器中运行。除了我想从flask shell在同一个docker容器中执行一些手动操作外,所有操作都很好。问题是,(x,_external=True)的
url\u总是返回,不管我如何在shell中设置服务器名称。
显然,我已尝试将服务器名称设置为无更改

$ 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}('main.index','u external=True,'u scheme='https')}
}

由此产生:

我想得到:


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

您的应用程序使用创建应用程序上下文时定义的
服务器名称

如果要在shell中执行此操作,可以在设置
服务器名称后创建测试请求上下文

>>> 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\u for
使用构建此url。此
url\u适配器
是在初始化时定义的,它发生在shell启动时。它调用并使用定义的
服务器名称

此解决方案与前面介绍的解决方案非常相似,只是它需要较少的步骤:

>>> 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导入当前应用程序,url\u
使用当前的应用程序测试请求上下文('localhost.com'):
url=url\u表示('索引')
...

这样就不需要设置config
SERVER\u NAME
,因为我们正在现场注入一个
reqctx
,以便
url\u for
可以正确构建路径。对于我的例子,我想要一个相对路径,所以我不需要添加属性
\u external

谢谢,这已经奏效了。我没有意识到在设置服务器名称后需要创建一个新的请求上下文。再次感谢!使用test_request_context()时是否存在任何缺陷?我担心这不是适用于生产服务器的解决方案。请帮忙@Whitellama我知道这已经晚了,但是如果只需要一个新的上下文,那么您可以尝试对当前的应用程序使用
。应用程序上下文():…