我有一个Blog模型,其中包含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
循环之间的部分无法渲染。
我的查询有问题吗?还是我使用模板引擎错误?
我注意到的2件事。
您正在模板中使用查询来对其进行迭代并执行什么操作?打印信息?您需要获取实体。查询时要么获取它们,要么迭代并获取。
posts = db.GqlQuery('SELECT * FROM Blog ORDER BY time_created DESC').fetch(1000)
另外,如果您要将字典传递给Jinja,则可能会想检查您正在使用,{% for post in posts.iteritems() %}
但这不是这种情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句