文章内容
2018/8/3 13:32:17,作 者: 黄兵
Could not build url for endpoint 'xxx'. Did you forget to specify values ['xxx']?
最近在使用Flask的时候报如下错误:
werkzeug.routing.BuildError
werkzeug.routing.BuildError: Could not build url for endpoint 'manage.admin_edit_classification'. Did you forget to specify values ['classification_id']?
出错原因:
未查明。
解决方案:
在网上也没有找到很好的答案,经过不断摸索,终于解决问题。
视图代码:
@manage.route('/admin_edit_classification/<int:classification_id>', methods=['GET', 'POST'])
@login_required
@admin_required
def admin_edit_classification(classification_id):
# get classification item
classification_item = MaterialClassification.query.filter_by(id=classification_id).first()
# 获取当前用户id
user_id = current_user.id
# 页面信息
user_info = User.query.get_or_404(user_id)
title = '首 页'
page_name = 'Dashboard'
page_features = 'dashboard & statistics'
# get classification tables
get_classification_material = MaterialClassification.query.all()
# form
form = AddClassificationForm()
form.classification_name.data = classification_item.classification_name
form.classification_icon.data = classification_item.classification_icon
form.classification_icon.id = classification_item.id
return render_template('manage/admin_edit_classification.html', user_info=user_info, name=title,
pageName=page_name, description=page_name, pageFeatures=page_features,
classification_lists=get_classification_material, form=form,classification_item=classification_item)
这些代码也没有什么问题。
这是一个通过列表,修改内容的页面,通过传递需要修改的Id,到达修改页面。
之后看了一下前端代码:
<form action="{{ url_for('.admin_edit_classification') }}" method="post" role="form" enctype="multipart/form-data"/>
{{ form.csrf_token }}
<div class="form-group">
{{ form.classification_name.label(class='control-label',for='default') }}
{{ form.classification_name(class='form-control',placeholder='Placeholder text',id='default') }}
</div>
<div class="form-group">
{{ form.classification_icon.label(class='control-label',for='default') }}
<div class="fileinput fileinput-new" data-provides="fileinput">
<div class="input-group">
<div class="form-control uneditable-input input-fixed" data-trigger="fileinput">
<i class="fa fa-file fileinput-exists"></i>
<span class="fileinput-filename"> </span>
</div>
<span class="input-group-addon btn default btn-file">
<span class="fileinput-new"> Select file </span>
<span class="fileinput-exists"> Change </span>
{{ form.classification_icon() }}
</span>
<a href="javascript:;" class="input-group-addon btn red fileinput-exists"
data-dismiss="fileinput"> Remove </a>
</div>
</div>
</div>
<div class="form-group">
{{ form.submit(class='btn green') }}
</div>
</form>
似乎也没有什么问题,之后再看看报错内容:
File "E:\Python\Material prices\app\templates\manage\admin_edit_classification.html", line 43, in
block "content"
<form action="{{ url_for('.admin_edit_classification') }}" method="post" role="form" enctype="multipart/form-data"/>
File "E:\Python\Material prices\venv\lib\site-packages\flask\helpers.py", line 356, in
url_for
return appctx.app.handle_url_build_error(error, endpoint, values)
File "E:\Python\Material prices\venv\lib\site-packages\flask\app.py", line 2061, in
handle_url_build_error
reraise(exc_type, exc_value, tb)
File "E:\Python\Material prices\venv\lib\site-packages\flask\_compat.py", line 35, in
reraise
raise value
File "E:\Python\Material prices\venv\lib\site-packages\flask\helpers.py", line 345, in
url_for
force_external=external)
File "E:\Python\Material prices\venv\lib\site-packages\werkzeug\routing.py", line 1776, in
build
raise BuildError(endpoint, values, method, self)
werkzeug.routing.BuildError: Could not build url for endpoint 'manage.admin_edit_classification'. Did you forget to specify values ['classification_id']?
确定还是上面的form表单存在问题。
经过不断研究,修改代码:
<form action="{{ url_for('.admin_edit_classification',classification_id = form.classification_icon.id) }}" method="post" role="form" enctype="multipart/form-data"/>
{{ form.csrf_token }}
<div class="form-group">
{{ form.classification_name.label(class='control-label',for='default') }}
{{ form.classification_name(class='form-control',placeholder='Placeholder text',id='default') }}
</div>
<div class="form-group">
{{ form.classification_icon.label(class='control-label',for='default') }}
<div class="fileinput fileinput-new" data-provides="fileinput">
<div class="input-group">
<div class="form-control uneditable-input input-fixed" data-trigger="fileinput">
<i class="fa fa-file fileinput-exists"></i>
<span class="fileinput-filename"> </span>
</div>
<span class="input-group-addon btn default btn-file">
<span class="fileinput-new"> Select file </span>
<span class="fileinput-exists"> Change </span>
{{ form.classification_icon() }}
</span>
<a href="javascript:;" class="input-group-addon btn red fileinput-exists"
data-dismiss="fileinput"> Remove </a>
</div>
</div>
</div>
<div class="form-group">
{{ form.submit(class='btn green') }}
</div>
</form>
更改了form的url,后面加了参数id,最后问题终于解决。
个人感觉应该是需要修改的form表单url有问题,例如:
传过来需要修改的url:http://xxx.com/list/1
修改页面的表单url:http://xxx.com/edit/1,而不能是:http://xxx.com/edit/。
好了,问题解决。
黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - Could not build url for endpoint 'xxx'. Did you forget to specify values ['xxx']?
评论列表