2015-09-01 5 views
0

Я пытаюсь разбивать на страницы результаты django-фильтра.django-pagination to paginate django-filter results

  • Джанго 1.8.3
  • Джанго фильтр 0.11.0
  • Джанго-разбиения на страницы 1.0.7

Я настроен вид/шаблоны, как это предлагается в соответствующей документации, мои взгляды

class ItemFilter(django_filters.FilterSet): 
    class Meta: 
     template_name = 'library/items.html' 
     model = Item 
     fields = ['type','publishing','author','tags'] 
     order_by = ['id'] 

def itemimages(request): 
    f = ItemFilter(request.GET, queryset=Item.objects.all()) 
    return render_to_response('library/images.html', {'filter': f}) 

мой шаблон

{% extends 'library/base.html' %} 
{% load pagination_tags %} 

{% block title %}Library Index{% endblock %} 

{% block body_block %} 
    {% load staticfiles %} 
    <ul class="rig columns-3"> 
     {% autopaginate filter 2 as filter_list %} 
     {% for obj in filter_list %} 
      <li> 
       <a href="/library/{{ obj.id }}/"> 
        <img src="{% static "/" %}{{ obj.cover.url }}"/> 

        <p>{{ obj.title }}<br/>{{ obj.national_title }}</p> 
       </a> 
      </li> 
     {% endfor %} 
     {% paginate %} 
    </ul> 
{% endblock %} 

{% block sidebar_block %} 
    <form action="" method="get"> 
     {{ filter.form.as_p }} 
     <input type="submit"/> 
    </form> 
{% endblock %} 

, но все, что я могу увидеть сообщение об ошибке (она работает без autopaginate блока)

KeyError at /library/ 

'request' 

Request Method:  GET 
Request URL: http://localhost:8000/library/ 
Django Version:  1.8.3 
Exception Type:  KeyError 
Exception Value:  

'request' 

Exception Location:  /usr/lib64/python2.7/site-packages/django/template/context.py in __getitem__, line 71 
Python Executable: /usr/bin/python2.7 
Python Version:  2.7.5 

Пожалуйста, помогите мне определить, где я не прав. Документация на django-filter предполагает, что список можно получить как f.qs, но он никогда не работал для меня.

ответ

0

Попробуйте визуализировать изображение с помощью клавиши render вместо render_to_response, так что объект request доступен в контексте шаблона.

from django.shortcuts import render 

def itemimages(request): 
    f = ItemFilter(request.GET, queryset=Item.objects.all()) 
    return render(request, 'library/images.html', {'filter': f})