使用flask为数据库中的行创建删除按钮

时间:2017-12-11 20:38:28

标签: python html flask

我正在编写一个小程序,使用Python(flask,psycopg2),SQL和HTML添加,删除和可视化数据库中的条目。现在我需要为数据库中的每个条目创建一个可以删除该条目的按钮。在HTML端(index.html),我有这个:

<html>
<head>
<title>{{ title }} - Datos!</title>
</head>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 10%;
}

td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}

tr:nth-child(even) {
background-color: #dddddd;
}
</style>
<body>
<h1>Hola, {{ user.nickname }}!</h1>
<table>
  <tr>
    <th>ID</th>
    <th>var1</th>
    <th>var2</th>
    <th>var3</th>
    <th>var4</th>
    <th>var5</th>
  </tr>
    {% for i in range(0, largo) %}
      <tr>
        {% for pos in all_pos[i] %}
          <td>{{ pos }}</td>
        {% endfor %}
      </tr>
      <form action="{{ url_for('delete_part', part_id = t_id) }}"     
      method=post class=boton.borrar>
        <input type=hidden value="{{ all_pos[i][0] }}"> </input>
        <input type=submit value= Borrar></input>
      </form>
    {% endfor %}
    </table>
    </body>
    </html>

函数delete_part在routes.py中,如下所示:

from flask import render_template, request, redirect, url_for
from app import app
from config import config
from app import forms
import psycopg2

def show_pos():
    conn = None
    try:
        params = config()
        conn = psycopg2.connect(**params)
        cur = conn.cursor()
        cur.execute("SELECT * FROM table ORDER BY t_id")
        rows = cur.fetchall()

        cur.close()
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is not None:
            conn.close()
    return rows

def insert_transaccion(transaccion):
    sql = """INSERT INTO table  (var1, var2, var3,     
var4, var5) VALUES(%s, %s, %s, %s, %s)"""
    conn = None
    try:
        params = config()
        conn = psycopg2.connect(**params)
        cur = conn.cursor()
        cur.execute(sql,transaccion)
        conn.commit()
        cur.close()
        except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is not None:
            conn.close()

def delete_part(part_id):
    conn = None
    rows_deleted = 0
    try:
        params = config()
        conn = psycopg2.connect(**params)
        cur = conn.cursor()
        cur.execute("DELETE FROM table WHERE part_id = %s", (part_id,))
        rows_deleted = cur.rowcount
        conn.commit()
        cur.close()
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is not None:
            conn.close()

    return rows_deleted

@app.route('/')
@app.route('/index')
def index():
    user = {'nickname': 'John'}
    all_pos = show_pos()
    largo = len(all_pos)
    return render_template('index.html', title='Home', user = user,     
all_pos = all_pos, largo = largo)


@app.route('/add', methods=['GET', 'POST'])
def add_transaction():
    form = forms.AddTransaction(request.form)
    if request.method == 'POST':
        if form.validate_on_submit():
            new_transaction = (form.var1.data, form.var2.data, 
form.var3.data, form.var4.data, form.var5.data)
            insert_transaccion(new_transaction)
            #return redirect(url_for('index'))

    return render_template('add_transaction.html', form=form)

但是,我收到以下错误:

jinja2.exceptions.TemplateSyntaxError: expected token 'end of print statement', got '='

我试图给delete_part它需要的参数(可能是错误的方式)。如果我删除$t_id = $并离开${{ all_pos[i][0] }}$,则错误消息将更改为:

werkzeug.routing.BuildError: Could not build url for endpoint 'delete_part' with values ['part_id']

0 个答案:

没有答案