首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在GqlQuery对象上迭代

不能在GqlQuery对象上迭代
EN

Stack Overflow用户
提问于 2014-02-06 10:46:16
回答 1查看 275关注 0票数 1

我有一个博客模型,其中包含4个实体,主题,博客,time_created和day_created。我查询所有的值并将其赋值给传递给jinja2模板的对象。在模板中,我遍历对象并打印每个不同的实体,从而显示每个博客帖子。

数据的模型是:

代码语言:javascript
复制
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)

我查询所有条目,将其作为单独的帖子显示如下:

代码语言:javascript
复制
posts = db.GqlQuery('SELECT * FROM Blog ORDER BY time_created DESC')

我把这些传递给模板

代码语言:javascript
复制
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)) 

函数呈现()是:

代码语言:javascript
复制
def render(self, template, **kw):
    self.response.out.write(render_str(template, **kw))

我有一个主模板blogbase.html,它继承到所有其他页面,它包含用于模板继承的以下行:

代码语言:javascript
复制
<div class="content">
  {% block content %}
  {% endblock %}
</div> 

在显示主博客页并继承的html文件中,如下所示:

代码语言:javascript
复制
{% 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:

代码语言:javascript
复制
<google.appengine.ext.db.GqlQuery object at 0x7f99f03cd050>

但是我不能像模板中那样迭代这个对象,普通的html工作,但是for循环之间的部分不呈现。

我的问题出什么问题了吗?还是我用错了模板引擎?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-06 10:54:24

我注意到了两件事。

您正在使用模板中的查询来迭代它并执行什么?打印信息?你得去找那些实体。要么在查询时获得它们,要么迭代和获取它们。

代码语言:javascript
复制
posts = db.GqlQuery('SELECT * FROM Blog ORDER BY time_created DESC').fetch(1000)

另外,如果您将dicts传递给jinja,您可能会检查您是否在使用{% for post in posts.iteritems() %},但这里不是这样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21600645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档