所以我设置了一个视图:
class toi(FlaskView):
def index(self):
...
return render_template('home.html')
@route('/api/')
@route('/api/<int:urlgid>/')
@route('/api/<int:urlgid>/<int:urlper>/')
def APIInstruction(self, urlgid=None, urlper=None):
return render_template('toi-instructions.html')
然后在我的主app.py中
from views.toi import toi
toi.register(app)
然后在HTML中,toi:index正在输出我有
... <a href="{{ url_for('toi:APIInstruction') }}">how to use the API</a> ...
这给了我一个BuildError(没有进一步的细节),我一直在努力解决这个问题。如果我删除@routes,则错误消失。如果我摆脱了第二和第三个@routes,它不会给我一个建筑师。如果我将urlgid和urlper放在url_for()函数中,它不会改变任何东西。我试过更改端点,我尝试将url_for更改为toi:api。
我不确定导致此BuildError的错误。
答案 0 :(得分:1)
当您为单个视图使用多个路由时,会发生多个端点的创建(每个路由一个)。为了帮助您区分每个端点,Flask-Classy会将索引附加到预期路由名称的末尾。从定义的最后一个路径开始,顺序从0到n。所以举个例子:
@route('/api/') # use: "toi:APIInstruction_2"
@route('/api/<int:urlgid>/') # use: "toi:APIInstruction_1"
@route('/api/<int:urlgid>/<int:urlper>/') # use: "toi:APIInstruction_0"
def APIInstruction(self, urlgid=None, urlper=None):
return render_template('toi-instructions.html')
您可以在此处详细了解此行为: http://pythonhosted.org/Flask-Classy/#using-multiple-routes-for-a-single-view
或者(这是我更喜欢的方法)您可以在任何@route
装饰器中指定要明确使用的端点。例如:
@route('/api/', endpoint='apibase')
可以使用以下方式访问:
url_for('apibase')