Flask添加作者按钮路由报错:无法构建/authors/add端点URL
解决Flask中werkzeug.routing.BuildError的问题
这个问题我太熟了!Flask的url_for经常让刚上手的开发者踩这个坑😅,咱们一步步来搞定它:
错误原因
url_for()函数的核心作用是通过视图函数的端点名称生成URL,而不是直接传入URL路径。你现在在模板里写的url_for('/authors/add')是把路径当端点传了,但Flask根本找不到名为/authors/add的端点,所以抛出了BuildError。
默认情况下,视图函数的端点就是函数本身的名称,比如你routes.py里的@app.route("/authors")对应的端点是authors(也就是函数名),而@app.route("/authors/add")对应的端点是这个视图函数的函数名(比如你可能写的是def add_author():,那端点就是add_author)。
解决方案
1. 确认routes.py里的视图函数名
先看你/authors/add路由对应的函数名,比如你的代码应该是类似这样的:
@app.route("/authors/add", methods=['GET','POST']) def add_author(): # 这个函数名就是端点名称 # 处理添加作者的逻辑 return render_template(...)
2. 修改模板里的url_for调用
把模板里的错误写法改成用函数名(端点名称):
错误写法:
<a href="{{ url_for('/authors/add')}}"><button type="button" id="addAuthorButton" class="btn-primary" name="button">Add Author</button></a>
正确写法:
<a href="{{ url_for('add_author')}}"><button type="button" id="addAuthorButton" class="btn-primary" name="button">Add Author</button></a>
特殊情况:如果自定义了endpoint参数
如果你给路由手动指定了endpoint参数,比如:
@app.route("/authors/add", methods=['GET','POST'], endpoint='authors_add') def add_author(): # 处理逻辑
那就要用自定义的端点名称:
<a href="{{ url_for('authors_add')}}">...</a>
额外提示
用url_for而不是直接写URL路径的好处是:如果以后你需要修改路由的路径(比如把/authors/add改成/authors/new),只要修改routes.py里的路由,模板里的url_for('add_author')会自动生成新的URL,不用逐个改模板,维护起来更方便。
内容的提问来源于stack exchange,提问作者gtx
相关产品推荐
相关产品推荐

