Flask在客户端使用SQL查询

时间:2014-09-03 13:14:09

标签: python flask sqlalchemy flask-sqlalchemy

我正在使用Python / Flask做一个小项目。我的数据库模型由两个表组成,例如post和comments .. Post表包含帖子,而comments表包含帖子的评论。发布和评论已链接..

我有两个模板,feed.html和blogpost.html ..在feed.html中将显示帖子的标题列表,当点击标题链接时,它将通过blogpost.html显示完整的帖子内容..

现在,在feed.html中它会列出所有帖子现在都很好..但是我想实现每个帖子的评论数量,这可以很容易地从服务器端查询,但问题是 - 我我将所有帖子传递给feed.html,并在客户端使用for循环呈现每个帖子标题..

user = User.query.filter_by(name = name).first()
return render_template("feed.html",
posts = Post.query.filter_by(user_id = user.id).order_by(Post.timestamp.desc()).all())

并在feed.html中,我呈现为,

{ % for post in posts %}
     <a href="/feed/{{post.id}}" class="post-title">{{ post.title }}</a>
      by <a href="/feed/{{ post.author.name }}">{{ post.author.name }}</a> 
      | {{ post.timestamp}} 
      | <a href="#"> TROUBLESOME PART </a> 
{% endfor %}

我目前被困在这里..

我可以通过执行来获得帖子的评论数量,

comments = Comment.query.filter_by(post_id = post.id).all()
len(comments)

但是当我通过模板传递整个帖子时,我无法对各个帖子进行查询..

请帮忙......

1 个答案:

答案 0 :(得分:2)

CommentPost之间建立多对一的双向关系:

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)


class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True
    post_id = db.Column(db.Integer, db.ForeignKey(Post.id), nullable=False)

    post = db.relationship(Post, backref='comments')

现在,如果您有Post的实例,则可以post.comments获取该帖子的评论。在Jinja模板中,使用post.comments|length来计算。

相关问题