2013-01-24 109 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