2014-02-06 4 views
1

У меня есть модель блога, которая содержит 4 объекта, тему, блог, time_created и day_created. Я запрашиваю все значения и присваиваю их объекту, который переходит к шаблону jinja2. В шаблоне я перебираю объект и печатаю каждый отдельный объект, что приводит к отображению каждого сообщения в блоге.Невозможно перебрать объект GqlQuery

Модель для данных:

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() is:

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 %} 

Я добавил отладки строку, чтобы увидеть, работает ли запрос и возвращает истинное со следующим:

<google.appengine.ext.db.GqlQuery object at 0x7f99f03cd050> 

Но я не могу перебирать этот объект, как в шаблонах, обычный html работает, но часть между циклом for не отображает.

Есть что-то не так в моем запросе? Или я неправильно использую механизм шаблонов?

ответ

1

2 вещи, которые я заметил.

Вы используете запрос в своих шаблонах, чтобы перебирать его и делать что? Распечатать информацию? Вам нужно получить сущности. Либо получите их, когда вы запрашиваете, или итерации и выборки.

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

Кроме того, если вы передаете dicts к дзиндзя вы можете Wanny проверить, что вы используете {% for post in posts.iteritems() %}, но это не тот случай.

+0

В соответствии с [docs] (https://developers.google.com/appengine/docs/python/datastore/gqlqueryclass#GqlQuery) GqlQUery возвращает объекты в объекте. И да, я передаю этот объект шаблону для печати отдельных объектов в качестве темы, контента и даты блога. – Bhargav

+0

@Bhargav, но возвращает объект запроса, а не сущности! –

+0

@Bhargav сделать выборку. Возвращаемый объект запроса используется для других целей. Один из них добавляет динамические фильтры, разбиение на страницы и другие. –

Смежные вопросы