【问题标题】:Displaying Comments Jinja2-Python显示评论 Jinja2-Python
【发布时间】:2013-01-24 14:17:54
【问题描述】:

我正在使用 Python 和 Jinja2 在 Google App Engine 中撰写博客。我有一个用于我的博文的 GQL 表和一个用于所有 cmets 的表。公共表中的每条记录都有一个 blogpost_id 列,以便我知道它们链接到哪个博客文章。我使用查询“SELECT * from BLOGPOSTS”并将其传递给我的渲染函数。然后在我的 HTML 模板中有一个 for 循环,可以打印出我所有的博文。这很顺利。在博文的永久链接中,打印 cmets 很容易,因为我知道 blogpost_id,所以我可以根据它查询 cmets 表并将它们打印出来。

然而,在首页上,我想在其正下方显示每篇博文的前两个 cmets。但我无法想出在我的首页上的博客帖子下方打印出 cmets 的解决方案,因为我不知道如何将特定博客帖子的 cmets 传递给我的渲染函数。有解决方案吗?

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore jinja2


    【解决方案1】:

    为什么不将包含博客文章的 GQL 查询结果传递给模板,为什么不传递将博客文章映射到其最近的两个 cmets 的字典列表?

    这样的事情可能会奏效(尽管可能不是最有效的方法):

    posts = GqlQuery("SELECT * from BLOGPOSTS")
    posts_and_comments = []
    for post in posts:
        two_comments = GqlQuery("SELECT * from COMMENTS WHERE blogpost_id = :1 ORDER BY age LIMIT 2", post.blogpost_id)
        current_post = {post: two_comments}
        posts_and_comments.append(current_post)
    

    然后您可以将posts_and_comments 传递到您的模板中,并以您喜欢的任何方式对其进行迭代。

    此外,您可能希望查看ancestor queries instead,而不是通过blogpost_id 进行检查,并将每条评论的祖先设置为其父帖子。

    【讨论】:

    • 您能否举一个祖先查询的示例以及您如何设置数据库以使其正常工作。
    • 这是另一个问题的主题,所以我建议阅读一些关于祖先查询的 Google 文档。但基本上,当你创建一个新的评论实体时,你可以这样做:parent=db.Key.from_path(datastore_model_name,post_id)。创建实体时将其放入参数中。这很好地组织了事物,并带来了一些好处(包括快速查询以查找具有相同父实体的 cmets)。
    猜你喜欢
    • 2013-06-05
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2014-09-09
    相关资源
    最近更新 更多