2013-12-04 2 views
0

Я хочу использовать django.core.paginator, и у меня проблема с функцией render_to_response. Переменная с именем страницами в views.py должно возвращать количество страниц и т. Д., Но это не так. Все истории, которые я вижу, но разбиение на страницы не работает. views.py файл выглядит следующим образом:django paginator, количество страниц не возвращается

from django.shortcuts import render_to_response, get_object_or_404 
    from django.db.models import Q 
    from cms.models import Story, Category 
    from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 

    def listing(request): 
     story_list = Story.objects.all() 
     p = Paginator(story_list, 2) # Show 2 contacts per page 
     page = request.GET.get('page') 
     try: 
      pages = p.page(page) 
     except PageNotAnInteger: 
      # If page is not an integer, deliver first page. 
      pages = p.page(1) 
     except EmptyPage: 
      # If page is out of range (e.g. 9999), deliver last page of results. 
      pages = p.page(p.num_pages) 
     return render_to_response('/usr/local/lib/python2.7/dist-packages/django/bin/project_003/cms/templates/cms/story_list.html', {"pages": pages}) 

И story_list.html как это:

{% extends "/usr/local/lib/python2.7/dist-packages/django/bin/project_003/cms/templates/cms/base.html" %} 
    {% block content %} 
     {% if heading %} 
      <h1>{{ heading }}</h1> 
     {% endif %} 
     <ul id="story-list"> 
      {% for story in story_list %} 
       <li><a href="{{story.get_absolute_url}}">{{story.title}}</a></li><br> 
     {{pages.p.num_pages}} 
    {% endfor %} 

    <div class="pagination"> 
     <span class="step-links"> 
      {% if pages.has_previous %} 
       <a href="?page={{ pages.previous_page_number }}">previous</a> 
      {% endif %} 

      <span class="current"> 
       Page {{ pages.number }} of {{ pages.paginator.num_pages }}. 
      </span> 

      {% if pages.has_next %} 
       <a href="?page={{ pages.next_page_number }}">next</a> 
      {% endif %} 
     </span> 
    </div> 
</ul> 

    {% endblock %} 

Где я сделал ошибку?

+0

Это не ваш фактический код , потому что вы не передаете «story_list» в шаблон. Ошибка состоит в том, что вы повторяете «story_list», а не 'pages'. –

+2

Также обратите внимание, что в настройке TEMPLATE_DIRS есть что-то * очень * неправильное, если вы передаете полный путь к файлу из корня в качестве места вашего шаблона в своем представлении. –

+0

Кроме того, вы возвращаете 'pages' как объект' Page' в шаблон. Это означает, что это не объект «Paginator», из которого вы можете получить количество страниц. –

ответ

1

Прямо из документации, с измененными именами переменных: https://docs.djangoproject.com/en/dev/topics/pagination/#using-paginator-in-a-view

вид:

def listing(request): 
    story_list = Story.objects.all() 
    p = Paginator(story_list, 2) # Show 2 contacts per page 
    page = request.GET.get('page') 
    try: 
     stories = p.page(page) 
    except PageNotAnInteger: 
     # If page is not an integer, deliver first page. 
     stories = p.page(1) 
    except EmptyPage: 
     # If page is out of range (e.g. 9999), deliver last page of results. 
     stories = p.page(p.num_pages) 
    return render_to_response('/usr/local/lib/python2.7/dist-packages/django/bin/project_003/cms/templates/cms/story_list.html', {"stories": stories}) 

шаблон:

<ul id="story-list"> 
    {% for story in stories %} 
     <li><a href="{{story.get_absolute_url}}">{{story.title}}</a></li><br> 
    {% endfor %} 
</ul> 

<div class="pagination"> 
    <span class="step-links"> 
     {% if stories.has_previous %} 
      <a href="?page={{ stories.previous_page_number }}">previous</a> 
     {% endif %} 

     <span class="current"> 
      Page {{ stories.number }} of {{ stories.paginator.num_pages }}. 
     </span> 

     {% if stories.has_next %} 
      <a href="?page={{ stories.next_page_number }}">next</a> 
     {% endif %} 
    </span> 
</div> 
Смежные вопросы