带有函数返回的Flask render_template

时间:2017-11-26 11:44:37

标签: python flask

我最近在Flask工作。 我有一个问题。

我的脚本如下所示:

@app.route('/')
def index():
    // execute
    return render_template('index.html', body=body, block=block)
@app.route('/api/')
def api():
    // execute
    return 'api'

函数apiindex完全相同。

我认为创建一个两个页面都可以调用并表示相同内容的函数。

是否有可能实现这一目标?

1 个答案:

答案 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)