所以我一直在修补jinja2和谷歌应用引擎。我只是在业余时间写一个小玩具应用程序;该应用程序有一个网页,显示最近的十个帖子及其评论。
在创建Post对象并将其存储在数据库中之后,在Google数据存储中使用以下内容,所有博客帖子都可以正常打印到页面上。我使用以下查询来显示十个帖子。
recent_blog_posts = ndb.gql("SELECT * FROM Posts ORDER BY created_at
DESC LIMIT 10;")
以下blogpage.html代码:
{% block content %}
{% for post in recent_blog_posts %}
<div>
<h3>{{post.title}}</h3>
<pre>
<p style="max-width: 100%;">{{post.post}}</p>
</pre>
<p>By: {{post.by_user}}</p>
<!-- this is where I want the comments to go (explained below)-->
<h4>Leave A Comment:</h4>
<form method="post">
<textarea name="comment" value="{{comment}}" style="height: 50px; width: 200px;"></textarea>
<input type="hidden" name="post_key" value="{{post.key}}">
<br>
<button>Comment</button>
</form>
</div>
<hr>
{% endfor %}
{% endblock %}
我只是迭代上面查询中的十个对象来打印所有博客帖子。但是,这对我来说很棘手。
我使用以下内容创建一个新的Comment实例:
new_comment = Comments(comment = comment,
user = user.name, parent = ndb.Key(Posts, int(post_key)))
new_comment_key = new_comment.put()
当我将新的Comment实例打印到屏幕上时,只需要查看,它们都会使用正确的父项和它们自己的ID正确打印出来。
现在,我不知道如何获取每个Comment实例并使用相应的帖子打印它。我怎么能做到这一点?
我到处搜索,甚至将其添加到上面的html模板中。 (代替上面html模板中的评论)
{% for comment in comment_query %}
{{comment.comment}}
{% endfor %}
使用以下查询:
recent_comments = Comments.query(ancestor=ndb.Key(Posts, int(new_string))).order(-Comments.created_at).fetch(limit=3)
这显然只是打印出页面上所有Posts实例的所有Comments实例。
提前致谢
答案 0 :(得分:1)
只需在后端本身形成输出列表。
recent_blog_posts = ndb.gql("SELECT * FROM Posts ORDER BY created_at
DESC LIMIT 10;")
posts_with_comments = []
for post in recent_blog_posts:
recent_comments = Comments.query(ancestor=post.key).order(-Comments.created_at).fetch(limit=3)
posts_with_comments.append([post, recent_commmnets])
然后在模板中迭代posts_with_comments
,如
{% for post,comments in posts_with_comments %}
<div>
<h3>{{post.title}}</h3>
<pre>
<p style="max-width: 100%;">{{post.post}}</p>
</pre>
<p>By: {{post.by_user}}</p>
<p> Comments: </p>
{% for commnet in comments %}
{{ comment }}
{% endfor %}
{% endfor %}