How to pass information from html(jinja) to python(flask) through a form
我正试图在The Flask Mega-Tutorial的博客中添加评论帖子的可能性(使用新帖子作为评论)。 我的问题不是数据库相关。 我不知道如何将表单"链接"到父帖子,然后评论引用他们的父母。
这是一些代码......
风景:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @app.route('/', methods=['GET', 'POST']) @app.route('/index', methods=['GET', 'POST']) @app.route('/index/<int:page>', methods=['GET', 'POST']) @login_required def index(page=1): form = PostForm() if form.validate_on_submit(): post = Post(body=form.post.data, timestamp=datetime.utcnow(),author=g.user) db.session.add(post) db.session.commit() flash('Your post is now live!') return redirect(url_for('index')) posts = g.user.followed_posts().paginate(page, POSTS_PER_PAGE, False) return render_template('index.html', title='Home', form=form, posts=posts) |
表格:
1 2 | class PostForm(Form): post = StringField('post', validators=[DataRequired()]) |
index.html的部分(帖子和表格在同一行......)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | {% for post in posts.items %} <table> <tr valign="top"> <td><img src="{{ post.author.avatar(50) }}"></td><td><p> {{ post.author.nickname }} said {{ momentjs(post.timestamp).fromNow() }}: </p> <p> {{ post.body }} </p></td> </tr> <tr> <form action="" method="post" name="post"> {{form.hidden_tag() }} <table> <tr> <td> <p> ------------- </p> </td> <td>{{ form.post(size=10, maxlength=140)}}</td> <td> {% for error in form.post.errors %} <span> style="color: red;"[{{error}}] </span> {% endfor %} </td> <td><input type="submit" value="Reply!"></td> </table> </form> </tr> </table> {% endfor %} |
Post的数据库模型:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Post(db.Model): __searchable__ = ['body'] id = db.Column(db.Integer, primary_key = True) body = db.Column(db.String(140)) timestamp = db.Column(db.DateTime) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) parent_id = db.Column(db.Integer, db.ForeignKey('post.id')) children = db.relationship("Post") def __repr__(self): return '<Post %r>' % (self.body) |
我的想法是添加一个新帖子作为"评论",给它一个旧帖子(parent_id)的数据库引用。 如何配置表单以便知道谁是父表单(parent_id)? 我应该在index.html上工作并找到一种方法来向表单提供有关父帖子的信息吗?
非常感谢你!
技术上,您不应该在一个页面上有多个相同表单的实例,但是......您可以使用HiddenField自动填写父帖子的ID。
在PostForm类中,添加一个HiddenField(记得导入它:
1 2 3 | class PostForm(Form): post = StringField('post', validators=[DataRequired()]) parentID = HiddenField('', validators=[DataRequired()]) |
在模板中添加
在您的validate方法中,将父ID添加到post类的实例的创建中:
1 2 3 4 | def index(page=1): form = PostForm() if form.validate_on_submit(): post = Post(body=form.post.data, parent_id=form.parentID.data, timestamp=datetime.utcnow(),author=g.user) |