Я новичок в Python, и я использую Google App Engine для создания простого блога, который поможет мне изучить его. У меня есть следующий тестовый код:
entries = db.Query(Entry).order("-published").get()
comments = db.Query(Comment).order("published").get()
self.response.out.write(template.render(templatePath + 'test.django.html', { 'entries': entries, 'comments': comments, }))
И шаблон Django, который выглядит так:
{% extends "master.django.html" %}
{% block pagetitle %}Test Page{% endblock pagetitle %}
{% block content %}
{% for e in entries %}
<p><a href="/post/{{ e.slug }}/">{{ e.title|escape }} - {{ e.published|date:"jS o\f F Y" }}</p>
{% endfor %}
{% for c in comments.all %}
<p>{{ c.authorname }} {{ c.published|date:"d/m/Y h:i" }}</p>
{% endfor %}
{% endblock content %}
Когда я просматриваю эту шаблонную страницу в браузере, я получаю:
TypeError: 'Entry' object is not iterable
Изменение строки {% for e in entries %}
на {% for e in entries.all %}
решает эту проблему, и это здорово.
Однако это бит, который я не понимаю; в другом шаблоне (для страницы архива) я тоже передаю список объектов Entry:
entries = db.Query(Entry).order("-published").fetch(limit=100)
self.response.out.write(template.render(templatePath + 'archive.django.html', { 'entries': entries, }))
С шаблоном следующим образом:
{% extends "master.django.html" %}
{% block pagetitle %}Home Page{% endblock pagetitle %}
{% block content %}
<ul>
{% for entry in entries %}
<li><a href="/post/{{ entry.slug }}/">{{ entry.title|escape }} <span>{{ entry.published|date:"jS o\f F Y" }}</a>{% if admin %} - <a href="/compose/?key={{ entry.key }}">Edit Post</a>{% endif %}</span></li>
{% endfor %}
{% endblock content %}
Этот код работает нормально, без с изменением entries
на entries.all
; действительно, если я делаю изменить его на то, что я не получаю никакого вывода (без ошибок, просто ничего вообще).
Может кто-нибудь объяснить, почему это так?
Редактировать: Первоначально я вставил неправильный фрагмент кода запроса для второго примера, что, вероятно, упростило бы людям возможность дать мне ответ ... изменил его сейчас.