2013-03-23 3 views
0

Я пытаюсь обновить существующую строку в базе данных. Когда я отправляю форму, я направляюсь в/item/edit /, который запускает 404. У меня есть аналогичный код в другом проекте и работает правильно. Я не могу понять, что с этим не так.Flask + WTForms: обновление строки

@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) 

ответ

1

Проблема заключается ваш метод сопоставляется /item/edit/something-here и something-here будет сопоставлен с переменной url.

Когда вы запрашиваете только /item/edit/ он не отображает ни к чему, так что поднимает 404.

+0

Что я должен изменить в своем коде, так что это правильно отображается? – cancerballs

+2

Ваша форма представления должна перейти к чему-то вроде '{{url_for ('edit_item', url =" whatever ")}}' – Doobeh

Смежные вопросы