Есть ли способ удалить строку из таблицы HTML с помощью пользовательского ввода, используя Flask (jinja2)? - PullRequest
0 голосов
/ 15 февраля 2019

Я новичок в Flask и программировании.Я создаю простую базу данных, используя Flask / SQLite.У меня есть пользователи, которые вводят данные в форму, и эти данные заполняют таблицу HTML рядом с формой.Мне удалось этого добиться.Тем не менее, я хотел бы добавить возможность пользователю удалять строки в таблице.

Я создал функцию в моем rout.py, которую я хотел бы использовать, но я не могу найти способ передать информацию, отправленную пользователем, обратно в мою route.py функцию.Я пытался использовать ссылку HTML, но я не хочу передавать пользователя на другой URL и обратно.Есть ли способ достичь этого?

Из маршрутов. Пип

@app.route("/")
@app.route('/interventions', methods=['GET', 'POST'])
@login_required
def interventions():
.....  

    qinter = Interventions.query.all()

    def delete_entry(entry):

        db.session.delete(qinter[(entry-1)])
        db.session.commit()
        return redirect(url_for('interventions'))
 .....

Из Interventions.html

.........

    <table border="1">
        <tr>
            <th>Delete?</th>
            <th>Date</th>
            <th>Chart #</th>
            <th>Provider</th>
            <th>Pharmacist</th>
            <th>COI</th>
            <th>Accepted?</th>
            <th>Intervention</th>
        </tr          
        {% for q in qinter %}
            <tr>
                <td><<a href="{{ delete_entry(q) }}">delete</a></td>
                <td>{{  q.date  }}</td>
                <td>{{  q.chart  }}</td>
                <td>{{  q.prescriber  }}</td>
                <td>{{  q.pharmacist  }}</td>
                <td>{{  q.category  }}</td>
                <td>{{  q.accepted  }}</td>
                <td>{{  q.intervention  }}</td>
            </tr>
         {% endfor %}
    </table>

1 Ответ

0 голосов
/ 15 февраля 2019

Вам нужен какой-то способ передачи из вашего HTML-шаблона на ваш маршрут вмешательства, по которому вы хотите удалить определенную строку в вашей таблице базы данных.Для этого вам нужно добавить некоторые дополнительные параметры в функцию маршрута, например:

@app.route('/interventions', methods=['GET', 'POST'])
@app.route('/interventions/<action>/<item_id>', methods=['GET', 'POST'])
@login_required
def interventions(action=None, item_id=None):

    def delete_entry(entry):

        db.session.delete(entry)
        db.session.commit()


    if request.method == "POST":

        if action == 'delete':

            # Get specific row user wants to delete
            qinter_row_to_delete = Interventions.query.get(item_id)

            # Delete row
            delete_entry(qinter_row_to_delete)

            return redirect(url_for('interventions'))


    elif request.method == "GET":

        qinter = Interventions.query.all()

        # Render template etc...

Затем из шаблона Jinja вызовите эту конечную точку, чтобы удалить строку:

<form id="form" action="{{url_for('interventions', action='delete', item_id=q.id)}}" method="POST">
...