2016-12-07 3 views
1

Я нашел много в этом, но я просто не могу заставить его работать. В принципе, у меня есть кнопка, и, нажимая ее, я хочу вернуть это значение обратно в мою фальш-бэкэнд.Кнопка флажка, передающая переменную обратно на python

HTML Button:

<form action="" method="POST" ><button class="btn btn-danger" type="submit" name="delete" value="{{ item2 }}"><span class="glyphicon glyphicon-trash"></span> Delete</button> </form> 

Python:

@app.route('/', methods=["GET","POST"]) 
def home():  
    if request.method == 'POST': 
     if request.form['delete'] == post_id: 
      (my sql login/cursor stuff....) 
      sql = "DELETE FROM test_table WHERE post_id = ?" 
      c.execute(sql, (post_id,)) 
      return redirect("/") 

Как вы можете видеть, я заселение ссылки (и последующей переменной) с дзиндзя. Он заполнил кнопку так, как должен, но отправка ее обратно на мой скрипт python не работает.

UPDATE: Когда я запустил это, я получаю внутреннюю ошибку сервера. Я не вижу, что такое ошибка маршрутизации, потому что я не могу отлаживать работу (используя wsgi/werkzeug).

Я думаю, мы можем окончательно сказать, что, не определяя post id, почему он не работает. Итак, мой вопрос: когда кнопка отправляет данные BACK на python, какое значение (и как) делает захват python? это name= или value= или что-то еще?

+0

Не могли бы вы рассказать нам больше о том, что не работает? Я создал простой вид в существующем приложении Flask, используя ваш код, и он прошел тест для 'request_method == 'POST'' и перенаправил меня обратно в URL'/'. Очевидно, что я удалил материал mysql и тест для значения post_id, но те части, которые я могу проверить, работают правильно (включая атрибут value ввода кнопки). – YellowShark

+0

Когда я нажимаю кнопку, я получаю ошибку: Внутренняя ошибка сервера Сервер обнаружил внутреннюю ошибку и не смог выполнить ваш запрос. Либо сервер перегружен, либо есть ошибка в приложении. –

+0

Что вы ожидаете от 'post_id' в' if request.form ['delete'] == post_id'? Вы не определили эту переменную. – davidism

ответ

2

Ваша проблема

request.form['delete'] == post_id 

Вы получаете значение с помощью кнопки (request.form['delete']) и попытаться сравнить со значением в переменной post_id, не существует.

Если вы хотите, чтобы получить значение от кнопки и присвоить переменной post_id, то вам нужно

post_id = request.form['delete'] 

или

post_id = request.form.get('delete') 

, а затем вы можете использовать post_id в SQL запросе.

@app.route('/', methods=["GET","POST"]) 
def home():  
    if request.method == 'POST': 

     post_id = request.form.get('delete') 

     if post_id is not None: 
      (my sql login/cursor stuff....) 
      sql = "DELETE FROM test_table WHERE post_id = ?" 
      c.execute(sql, (post_id,)) 
      return redirect("/") 
+0

Удивительный! Это в основном то, что сработало для меня ... Единственное различие заключалось в том, что я должен был делать: 'sql = (" DELETE FROM test_table WHERE post_id =% s ")' 'c.execute (sql, (post_id_delete,))' –

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