2013-01-24 80 views
0

我正在使用Python和Jinja2在Google App Engine中撰写博客。我有一个关于我的博客帖子的GQL表格,还有一个关于所有评论的表格。公共表中的每条记录都有一个blogpost_id列,以便我知道它们链接到哪个博客帖子。我使用查询'从BLOGPOSTS选择*'并将其传递给我的渲染功能。然后在我的HTML模板中有一个for-loop打印出我所有的博客帖子。这很顺利。在blogpost的永久链接中,打印评论很容易,因为我知道blogpost_id,所以我只需查询评论表并将其打印出来即可。显示注释Jinja2-Python

然而,在头版我想显示每个博客帖子下方它的前两个的意见。但我不能拿出对我的头版打印出的相关博客文章下面的评论的解决方案,因为我不知道如何在特定的博客帖子的意见传递给我的渲染功能。有没有解决方案?

回答

0

而不是仅仅传递一个包含相关博客文章到您的模板您的GQL查询的结果,为什么不通过映射博客文章到它的最新的两点意见词典列表?

像这样的东西可能会奏效(虽然可能不是最有效的方式做到这一点):

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到您的模板,并反复通过以任何方式都可以。

此外,而不是通过blogpost_id检查,您可能想要查看ancestor queries instead,并将每个评论的祖先设置为其父文章。

+0

你可以举一个祖先查询的例子,以及你如何设置数据库来运作。 –

+0

这是另一个问题的主题,所以我建议阅读一些关于祖先查询的Google文档。但基本上,当你创建一个新的注释实体,你可以做这样的事情:'父= db.Key.from_path(datastore_model_name,POST_ID)'。这在创建实体时放入参数中。这很好地组织了一些事情,并给出了一些好处(包括用同一父实体查找注释的快速查询)。 – Nate