无法遍历GqlQuery对象

巴尔加夫

我有一个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循环之间的部分无法渲染。

我的查询有问题吗?还是我使用模板引擎错误?

吉米·凯恩(Jimmy Kane)

我注意到的2件事。

您正在模板中使用查询来对其进行迭代并执行什么操作?打印信息?您需要获取实体。查询时要么获取它们,要么迭代并获取。

posts = db.GqlQuery('SELECT * FROM Blog ORDER BY time_created DESC').fetch(1000)

另外,如果您要将字典传递给Jinja,则可能会想检查您正在使用,{% for post in posts.iteritems() %}但这不是这种情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章