Настраиваемая динамическая колба WTForm - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь создать WTForm для добавления элементов в таблицу SQLite.В таблице есть только два столбца (идентификатор и имя)

rout.py:

@app.route('/systems', methods=['GET', 'POST'])

def systems():

    form = SystemForm()
    if form.validate_on_submit():
        system = Systems(name=form.systemname.data)
        db.session.add(system)
        db.session.commit()
        return redirect(url_for('systems'))
    return render_template('systems.html', title='Systems', form=form)

forms.py:

class SystemForm(FlaskForm):

    systemname = StringField('System', validators=[DataRequired()])
    submit = SubmitField('Add')

Но перед формой я хочуотобразить все строки, уже присутствующие в таблице:

  • system 1
  • system 2 ....

    текстовое поле / кнопка отправки

Как я могу выполнить это, предполагая, что я могу получить строки следующим образом:

database = "mydb.db"
conn = create_connection(database)
cur = conn.cursor()

cur.execute("SELECT * FROM systems")
data = cur.fetchall()

Будет ли список частью определения формы?Или может быть помещен перед тегом формы, как показано ниже (будучи данными возвращаемых строк из запроса sqlite):

    {% for item in data %}
        <table>
        <tr>
            <td>{{item[1]}}</td>
        </tr>
        </table>
    {% endfor %}

Как я могу передать данные в HTML-шаблон?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019
@app.route('/systems', methods=['GET', 'POST'])

def systems():
    if request.method == 'POST':
        if request.form.get('submit') == 'Add':
            form = SystemForm()
            if form.validate_on_submit():
                system = Systems(name=form.systemname.data)
                db.session.add(system)
                db.session.commit()
                return redirect(url_for('systems'))
        else:
            delete_ids = request.form.getlist('delete_id')
            for delete_id in delete_ids:
                db.session.query(Systems).filter(Systems.id==delete_id).delete()
            db.session.commit()

    data = db.session.query(Systems)
    form = SystemForm()
    return render_template('systems.html', title='Systems', form=form, data=data)
0 голосов
/ 03 марта 2019

Кажется, что вы уже сделали все, единственное, что нужно сделать, это:

@app.route('/systems', methods=['GET', 'POST'])
def systems():
    form = SystemForm()
    if form.validate_on_submit():
        system = Systems(name=form.systemname.data)
        db.session.add(system)
        db.session.commit()
        return redirect(url_for('systems'))
    # perform your database lookup to get `data`
    return render_template('systems.html', title='Systems', form=form, data=data)
...