Разбивка на страницы, возвращающая неправильный объект (не итерируемый?)

Я пытаюсь вернуть объекты с разбивкой на страницы, а затем перебирать их. Кажется довольно простым. Хотя, видимо, я что-то упускаю. Можете ли вы найти ошибку?

Вид:

def thumbnails(request):
    page = request.GET.get('page', 1)
    album = request.GET.get('a', None )

    if (album):
        objects = Album_Photos.objects.filter(id=album)
    else:
        objects = None

    if (objects):
        paginator = Paginator(objects, 25)

    try:
        photos = paginator.page(page)
    except PageNotAnInteger:
        photos = paginator.page(1)
    except EmptyPage:
        photos = None #paginator.page(paginator.num_pages)

    return render_to_response('photos/thumbnails.html', {'photos': photos}, context_instance = RequestContext(request))

Шаблон:

{% if photos %}
    {% for photo in photos %}
        <img src="{{photo.original.url}}">
    {% endfor %}
{%endif%}

Ошибка:

TemplateSyntaxError at /photos/thumbnails/
Caught TypeError while rendering: 'Page' object is not iterable

1 {% if photos %}
2   {% for photo in photos %}
3       <img src="{{photo.original.url}}">
4   {% endfor %}
5 {%endif%}

person Brian D    schedule 14.07.2011    source источник


Ответы (2)


Ну, в отличие от примера в документации Django (по крайней мере, в моем случае), вы должны добавить .object_list к этому объекту Page.

{% if photos %}
    {% for photo in photos.object_list %}
        <img src="{{photo.original.url}}">
    {% endfor %}
{%endif%}
person Brian D    schedule 14.07.2011
comment
Вы, должно быть, смотрели документацию разработчиков. Это правильно в документах версии 1.3: docs. djangoproject.com/en/1.3/topics/pagination/ - person Cruel; 20.10.2011

Это было изменено в django: где-то между версиями 1.3 и 1.6 Paginator.Page стал итерируемым.

Если вы будете следовать примеру из текущей документации, используя более старую версию django, вы получите эту ошибку.

Либо добавьте .object_list, как сказал Брайан Д., либо обновите django.

person amarillion    schedule 20.02.2013