我正在使用Flask框架创建一个非常简单的应用程序。我顺利进行,直到我为Employee模型创建编辑/更新路线。我想要做的是让员工更新他们的信息,当他们点击提交时,sql_alchemy就会发挥作用。我遇到的问题是我的编辑网址正在破坏其工作的地方。我一直在寻找我的应用,但我似乎无法让它发挥作用。这是我编辑/更新操作的相关代码:
@app.route('/edit_employee/<id>', methods=['GET','PUT'])
def edit_employee(id):
if request.method == 'GET':
employee = Employee.query.get(id)
return render_template('edit.html', employee=employee)
else:
existing_employee = Employee.query.get(id)
updated_employee = Employee(request.form['name'], request.form['title'],
request.form['email'], request.form['department'])
file = request.files['profile_image']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
filename = updated_employee.name
# Destroy the old image first
os.remove(os.path.join(app.config['UPLOAD_FOLDER'], filename))
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
existing_employee = updated_employee
db.session.commit()
return redirect(url_for('all_employees'))
这是一个layout.html文件。我怀疑问题是在我的form_action块中,但我不确定。我只粘贴了我的html视图的一部分(它本质上是一个带有属性的表单)。
<body>
<div>
<form{% block form_action %}{% endblock %}>
<h2>{% block h2 %}{% endblock %}</h2>
<div class="control-group">
<div class="controls">
<label>Name</label>
<input type="text" id="name" name="name"
placeholder="Specify name" value="{{ request.form.name }}"
required>
.............
我的编辑视图:
{% extends "layout.html" %}
{% block h2 %}Edit a Blackduck employee{% endblock %}
{% block form_action %}action="{{ url_for('edit_employee') }}" enctype=multipart/form-data method=post class="form-horizontal"{% endblock %}
{% block submit %}Update{% endblock %}
我已经和Rails和Sinatra合作了一段时间了,我根本不习惯Flask的错误渲染。对于此错误BuildError: ('edit_employee', {}, None)
,我无法准确地说出与Rails不同的问题。帮助将不胜感激。
答案 0 :(得分:0)
错误在于您正在尝试访问名为edit_employee
且路由为零的路由,但这样的路由不存在。您的edit_employee
路由接受<id>
参数,因此您需要像这样调用路由:
{{ url_for('edit_employee', id = id) }}