Werkzeug BuildError问题:POST请求后保留带变量的URL链接
解决werkzeug.routing.exceptions.BuildError错误并保留带cod_ver的URL
错误原因
你遇到的BuildError是因为url_for(rut_gen)用法错误:url_for的第一个参数需要是Flask视图函数的名称(比如你的copass),而非直接传入拼接好的URL路径字符串。之前你把rut_gen设为/copass/xxx这类路径,Flask无法根据该字符串匹配到对应视图函数,因此抛出错误。
修复方案
1. 修改Flask路由代码
无需生成rut_gen路径,直接将cod_ver变量传递给模板,url_for可通过视图函数名+参数反向生成正确URL:
@app.route('/copass/<string:cod_ver>', methods=['GET', 'POST']) def copass(cod_ver): if request.method == 'POST': # 此处保留你的表单处理逻辑 pass # GET和POST请求统一返回模板,传入cod_ver参数 return render_template('user/cam_pass.html', cod_ver=cod_ver)
2. 修改HTML表单代码
在url_for中指定视图函数名copass,并传入cod_ver参数,即可生成带cod_ver的POST目标URL:
<form action="{{ url_for('copass', cod_ver=cod_ver) }}" method="post"> <input type="hidden" name="cod_fpass" value="{{cod_fpass}}"/> <!--其他POST输入项--> </form>
原理说明
url_for是Flask的反向路由工具,核心作用是通过视图函数名称和路由所需参数,自动生成符合路由规则的URL。这种方式既避免了手动拼接URL的错误,还能在路由规则修改时自动同步生成的URL,提升代码可维护性。
内容的提问来源于stack exchange,提问作者christian
相关产品推荐
相关产品推荐

