首页 > 解决方案 > 在 FLASK 中的表单的同一页面上显示数据

问题描述

我需要一些代码帮助,我是烧瓶的新手,我一直试图在与表单相同的页面上显示数据,这意味着我不想重定向并在不同的页面上显示数据,我已经做了几次尝试,但我失败了,请帮助我。

这是我的烧瓶代码

import os
from forms import  AddForm
from flask import Flask, render_template, url_for, redirect
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
# Key for Forms
app.config['SECRET_KEY'] = 'mysecretkey'

############################################

        # SQL DATABASE AND MODELS

##########################################
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)
Migrate(app,db)

class Puppy(db.Model):

    __tablename__ = 'puppies'
    id = db.Column(db.Integer,primary_key = True)
    name = db.Column(db.Text)

    def __init__(self,name):
        self.name = name

    def __repr__(self):
        return f"Puppy name: {self.name}"

############################################

        # VIEWS WITH FORMS

##########################################
@app.route('/')
def index():
    form = AddForm()
    if form.validate_on_submit():
        name = form.name.data
        new_pup = Puppy(name)
        db.session.add(new_pup)
        db.session.commit()
        return redirect(url_for('index'))
    puppies = Puppy.query.all()
    return render_template('testing.html',form=form, puppies=puppies)

if __name__ == '__main__':
    app.run(debug=True)

HTML 代码

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1>Welcome</h1>

    <form method="post">
      {{form.hidden_tag()}}
      {{form.name.label}} {{form.name}}
      {{form.submit()}}

    </form>
    <ul>

    {% for pup in puppies %}
    <li>{{pup}}</li>
    {% endfor %}

        </ul>

  </body>
</html>

这个你能帮我吗。

标签: pythonflaskflask-sqlalchemyflask-wtformsflask-admin

解决方案


如果您根本不希望页面刷新,则需要使用 ajax 调用,否则就足够了:

@app.route('/', methods=['GET','POST'])
def index():
    form = AddForm()
    if form.validate_on_submit():
        name = form.name.data
        new_pup = Puppy(name)
        db.session.add(new_pup)
        db.session.commit()

    puppies = Puppy.query.all()
    return render_template('testing.html',form=form, puppies=puppies)

if __name__ == '__main__':
    app.run(debug=True)

推荐阅读