【发布时间】:2020-12-05 08:28:43
【问题描述】:
我的开发服务器中的链接是相对于“/”的,而在生产中它们是相对于“/flask/”的。我如何在烧瓶应用程序中编写链接,以便它可以在尽可能少的变化的两个服务器上工作?
一个例子:
import sys
import platform
from flask import Flask, __version__
app = Flask(__name__)
@app.route("/")
def hello():
return """
Hello World!<br><br>
<a href="/info/">System Information</a>
"""
@app.route("/info/")
def info():
return f"""
Platform: {platform.platform()}<br>
Python version {sys.version}<br>
Flask version: {__version__}
"""
if __name__ == "__main__":
app.run()
这将在开发中工作,但在生产中工作将是:
<a href="/flask/info/">System Information</a>
我尝试使用蓝图来为路由添加前缀,而不是 Add a prefix to all Flask routes 中建议的链接,但它不起作用:
website/__init__.py
from flask import Flask, Blueprint
bp = Blueprint('myapp', __name__, template_folder='templates')
app = Flask(__name__)
app.register_blueprint(bp, url_prefix='/flask'
website/main.py
import sys
import platform
from flask import __version__
from website import app
@app.route('/')
def hello():
return f"""
Hello World!<br><br>
<a href="/info/">System Information</a>
"""
@app.route('/info/')
def info():
return f"""
Platform: {platform.platform()}<br>
Python version: {sys.version}<br>
Flask version: {__version__}
"""
编辑。我认为使用bluepring的正确方法是这样的,在路由定义之后移动register_blueprint。但是链接仍然断开,因为它没有转到/flask/info,而是转到/info。
website/main.py
import sys
import platform
from flask import url_for, __version__
from website import bp, app
@bp.route("/")
def hello():
return f"""
url = url_for('myapp.info')
Hello World!<br><br>
<a href="{url}">System Information</a>
"""
@bp.route("/info/")
def info():
return f"""
Platform: {platform.platform()}<br>
Python version {sys.version}<br>
Flask version: {__version__}
"""
app.register_blueprint(bp, url_prefix='/flask')
【问题讨论】:
-
您是否尝试设置 APPLICATION_ROOT?还是其他答案?
-
使用 APPLICATION_ROOT 时如何定义链接?像这样? 系统信息
标签: python flask hyperlink routes href