Sqlalchemy 烧瓶+;WTForms:更新行

Sqlalchemy 烧瓶+;WTForms:更新行,sqlalchemy,flask,wtforms,Sqlalchemy,Flask,Wtforms,我尝试更新数据库中的现有行。当我提交表单时,我会被引导到/item/edit/,这会触发404。我在一个不同的项目中有类似的代码,并且工作正常。我不知道这是怎么回事 @main.route('/item/edit/<string:url>', methods = ['GET', 'POST']) @login_required def edit_item(url): i = get_item_by_url(url) form = ItemForm(obj=i) if fo

我尝试更新数据库中的现有行。当我提交表单时,我会被引导到/item/edit/,这会触发404。我在一个不同的项目中有类似的代码,并且工作正常。我不知道这是怎么回事

@main.route('/item/edit/<string:url>', methods = ['GET', 'POST'])
@login_required
def edit_item(url):
  i = get_item_by_url(url)
  form = ItemForm(obj=i)
  if form.validate_on_submit():
    i.title = form.title.data
    i.url = form.url.data
    i.body = form.body.data
    i.email = form.email.data
    i.private = form.private.data
    file = request.files['itempic']
    if file and allowed_file(file.filename):
      filename = secure_filename(file.filename)
      file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
      i.itempic = filename
    db.session.add(i)
    db.session.commit()
    flash('The Item: %s, has been updated succesfully.' % form.url.data)
    return redirect(url_for("index"))
  return render_template('/item/edit.html',
    form = form,
    i = i)
@main.route('/item/edit/',方法=['GET','POST'])
@需要登录
def编辑_项(url):
i=通过url(url)获取项目
表格=项目表格(obj=i)
if form.validate_on_submit():
i、 title=form.title.data
i、 url=form.url.data
i、 body=form.body.data
i、 电子邮件=form.email.data
i、 private=form.private.data
file=request.files['itempic']
如果文件和允许的文件(file.filename):
filename=secure\u文件名(file.filename)
保存(os.path.join(app.config['UPLOAD\u FOLDER'],文件名))
i、 itempic=filename
db.session.add(i)
db.session.commit()
flash('项目:%s已成功更新。'%form.url.data)
返回重定向(url_用于(“索引”))
返回render_模板('/item/edit.html',
形式=形式,
i=i)

问题是您的方法映射到
/item/edit/somethine here
,而
somethine
将映射到
url
变量


当您仅请求
/item/edit/
时,它不会映射到任何内容,因此会引发404。

您的表单提交应该转到类似
{url\u for('edit\u item',url=“whatever”)}