我有点困惑如何在一个页面上有一个“删除”按钮来删除当前焦点的对象。
我正在尝试将此按钮添加到/edit/以删除任何打开的id
使用Python3和Flask
forms.py
class EditForm(Form):
name = StringField('Server Name', validators = [Length(1, 120), DataRequired()])
ip_address = StringField('IP Address', validators = [Length(1, 16), IPAddress()])
username = StringField('UCX User', validators = [Length(1, 64)])
password = StringField('UCX Password', validators = [Length(1, 64)])
description = StringField('Purpose/Description', validators = [Length(1-120)])
protocol = RadioField('Protocol', [DataRequired()],
choices=[('https', 'HTTPS'), ('http', 'HTTP')], default='https')
submit = SubmitField('Submit')
**delete = SubmitField('Delete')**Routes.py
@servers.route('/edit/<id>', methods=['GET', 'POST'])
def edit(id):
server = UcxServer.query.filter_by(id=int(id)).first_or_404()
form = EditForm(obj=server)
if form.validate_on_submit():
form.to_model(server)
db.session.commit()
flash('Your changes have been saved.')
return render_template('addserver2.html', form=form)Routes.py删除功能:
@servers.route('/delete/<id>')
def delete(id):
server = UcxServer.query.filter_by(id=int(id)).first_or_404()
try:
db.session.delete(server)
db.session.commit()
flash('Successfully deleted the {} server'.format(server))
return redirect(url_for('servers.index'))模板(addserver2.html):
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block page_content %}
<div class="page-header">
<h1>UCX Server</h1>
</div>
{{ wtf.quick_form(form) }}
{% endblock %}所以基本上,我可以加载编辑/页面,但是我如何连接"Delete“SubmitField来调用/delete/呢?
发布于 2015-03-07 07:36:45
我想通了。为未来的人们张贴答案。不确定是不是最好的方法,但只用了两行代码:
对于/edit/ route,我简单地添加了这个检查。
if form.delete.data:
return redirect(url_for('servers.delete', id=id))这使得整个编辑路线看起来像这样:
def edit(id):
server = UcxServer.query.filter_by(id=int(id)).first_or_404()
form = EditForm(obj=server)
if form.delete.data:
return redirect(url_for('servers.delete', id=id))
if form.validate_on_submit():
form.to_model(server)
db.session.commit()
flash('Your changes have been saved.')
return render_template('addserver2.html', form=form)发布于 2015-03-06 10:09:19
也许你可以使用定制的验证器。如下所示:
delete = SubmitField('Delete', validators=delete())有关如何使函数成为自定义验证器的信息,请查看此link。自定义验证器部分。
https://stackoverflow.com/questions/28890904
复制相似问题