我最近在Flask工作。 我有一个问题。
我的脚本如下所示:
@app.route('/')
def index():
// execute
return render_template('index.html', body=body, block=block)
@app.route('/api/')
def api():
// execute
return 'api'
函数api
和index
完全相同。
我认为创建一个两个页面都可以调用并表示相同内容的函数。
是否有可能实现这一目标?
答案 0 :(得分:0)
TL; DR 在这种情况下,我想我会选择使用我提出的4 th 选项
我将提出4种选择,有些可能比其他选择更可行。
如果您担心execute
代表的代码的代码重复(DRY),您可以简单地定义两个路由都可以调用的函数:
def execute():
# execute, return a value if needed
pass
@app.route('/')
def index():
execute()
return render_template('index.html', body=body, block=block)
@app.route('/api/')
def api():
execute()
return 'api'
这可能就是你的意思和寻找。
但是,如果您想要实际提供两条到同一功能的路线,您也可以这样做,只需记住它们从上到下进行扫描。显然,你不能使用这种方法返回2个不同的值。
@app.route('/')
@app.route('/api/')
def index():
# execute
return render_template('index.html', body=body, block=block)
一个3 rd 选项,对于你正在寻找的东西来说可能看起来有点过分(和/或繁琐)但是为了完整起见我会提到它。
您可以使用具有可选值的单个路线,然后决定要返回的内容:
@app.route('/')
@app.route('/<path:address>/')
def index(address=None):
# execute
if address is None:
return render_template('index.html', body=body, block=block)
elif address == 'api':
return 'api'
else:
return 'invalid value' # or whatever else you deem appropriate
4 th (最后,我保证)选项将指向2个路由到同一个函数,然后使用request
对象查找客户端请求的路由:
from flask import Flask, request
@app.route('/')
@app.route('/api')
def index():
# execute
if request.path == '/api':
return 'api'
return render_template('index.html', body=body, block=block)