У меня есть модель блога, которая содержит 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
не отображает.
Есть что-то не так в моем запросе? Или я неправильно использую механизм шаблонов?
В соответствии с [docs] (https://developers.google.com/appengine/docs/python/datastore/gqlqueryclass#GqlQuery) GqlQUery возвращает объекты в объекте. И да, я передаю этот объект шаблону для печати отдельных объектов в качестве темы, контента и даты блога. – Bhargav
@Bhargav, но возвращает объект запроса, а не сущности! –
@Bhargav сделать выборку. Возвращаемый объект запроса используется для других целей. Один из них добавляет динамические фильтры, разбиение на страницы и другие. –