我想定义多个呈现不同模板的端点,而不是写出每个模板。端点都是相似的,一个看起来像:
@app.route('/dashboard/')
def dashboard():
return render_template('endpoints/dashboard.html')
我尝试在每个端点名称的for循环中定义一个函数,但问题是该函数的名称保持不变,而Flask引发了一个错误。
routes = ['dashboard', 'messages', 'profile', 'misc']
for route in routes:
@app.route('/' + route + '/')
def route():
return render_template('endpoints/' + route + '.html')
如何在不重复的情况下创建这些视图?
答案 0 :(得分:2)
你不想这样做。相反,在路径中使用变量来捕获模板名称,尝试渲染模板,如果模板不存在则返回404错误。
from flask import render_template, abort
from jinja2 import TemplateNotFound
@app.route('/<page>/')
def render_page(page):
try:
return render_template('endpoints/{}.html'.format(page))
except TemplateNotFound:
abort(404)
或者,不太优选的是,只要为Flask提供唯一的端点名称,就可以使用相同的函数名称。默认名称是函数的名称,这就是Flask抱怨的原因。
for name in routes:
@app.route('/', endpoint=name)
def page():
return render_template('endpoints/{}.html'.format(name))