1

所以我有一个这样的视图:

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)

然后在 toi:index 输出的 HTML 中我有

... <a href="{{ url_for('toi:APIInstruction') }}">how to use the API</a>  ...

这给了我一个 BuildError(没有更多细节),我一直在努力解决这个问题。如果我删除@routes,错误就会消失。如果我摆脱了第二个和第三个@routes,它不会给我一个构建错误。如果我将 urlgid 和 urlper 放在 url_for() 函数中,它不会改变任何东西。我尝试更改端点,我尝试将 url_for 更改为 toi:api。

我不确定导致此 BuildError 的原因是什么。

4

1 回答 1

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')
于 2013-09-20T02:46:15.303 回答