我有一个博客模型,其中包含4个实体,主题,博客,time_created和day_created。我查询所有值并将其分配给传递给jinja2模板的对象。在模板中,我遍历对象并打印每个不同的实体,从而显示每个博客帖子。
数据模型是:
class Blog(db.Model):
subject = db.StringProperty(required = True, multiline = True)
blog = db.TextProperty(required = True)
time_created = db.DateTimeProperty(auto_now_add = True)
day_created = db.DateProperty(auto_now_add = True)
我查询所有条目以显示为单独的帖子:
posts = db.GqlQuery('SELECT * FROM Blog ORDER BY time_created DESC')
我将这些传递给模板
class Mainpage(BaseHandler):
def get(self):
posts = Blog_posts()
logging.info(posts)
if posts:
end_time = time.time() - start_time
logging.info(end_time)
logging.info(start_time)
userLogin = self.checkLogin()
cookieVal = self.read_secure_cookie('user-id')
if cookieVal:
u_id = cookieVal.split('|')[0]
usr_instance = Users.get_by_id(int(u_id))
if usr_instance:
name = usr_instance.username
if userLogin == True and name:
self.render("blog.html", posts = posts, userLogin = userLogin, user_name = name, end_time = int(end_time))
logging.info("Logged in = " + str(userLogin))
else:
self.render("blog.html", posts = posts, userLogin = userLogin, user_name = "", end_time = int(end_time))
else:
self.render("blog.html", posts = posts, userLogin = userLogin, user_name = "", end_time = int(end_time))
函数render()是:
def render(self, template, **kw):
self.response.out.write(render_str(template, **kw))
我有一个主模板blogbase.html,我继承到所有其他页面,它包含我用于模板继承的这些行:
<div class="content">
{% block content %}
{% endblock %}
</div>
并在显示主博客页面的html文件中继承:
{% extends "blogbase.html" %}
{% block content %}
{% for post in posts %}
<div class="one_post">
<div class="subject_title">
<div class="day">{{post.day_created.strftime("%d %b %Y")}}</div>
<a href="/blog/{{post.key().id()}}" target="_blank">
{{post.subject}}
</a>
</div>
<div class="post">
{{post.blog}}
</div>
</div>
{% endfor %}
<div class="query">
Queried {{end_time}} seconds ago
</div>
{% endblock %}
我添加了一个调试行来查看查询是否有效,并返回true,其中包含以下内容:
<google.appengine.ext.db.GqlQuery object at 0x7f99f03cd050>
但我无法像在模板中那样迭代这个对象,常规的html工作,但for
循环之间的部分不会渲染。
我的查询中有什么问题吗?或者我使用模板引擎错了?
答案 0 :(得分:1)
我注意到的两件事。
您在模板中使用查询来迭代它并执行哪些操作?打印信息?你需要得到实体。在查询或迭代并获取时获取它们。
posts = db.GqlQuery('SELECT * FROM Blog ORDER BY time_created DESC').fetch(1000)
此外,如果您将 dicts 传递给jinja,您可能会想知道您是否正在使用{% for post in posts.iteritems() %}
,但这不是这种情况。