@blazer05

Как настроить пагинатор?

Сделал выборку страниц по категориям т.е. при открытии какой либо категории в ней выводятся все новости этой категории - это все работает. Сделал пагинатор с ограничением 5 новостей на странице - да тоже работает, но допустим, если в категории 11 новостей и в пагенаторе перейти на следующую страницу, то выводится пустая страница а нужно чтобы выводились остальные новости данной категории - как это сделать?
Я уже запутался с этим - прошу помочь разобраться.
def category(reguest, slug, page_number=1):
    context_dict = {'username': auth.get_user(reguest).username}
    try:
        category = Category.objects.get(slug=slug)
        context_dict['category_name'] = category.name
        pages = BlogPost.objects.filter(category=category)
        current_page = Paginator(pages, 5)
        context_dict['pages'] = pages
        context_dict['category'] = category
        context_dict['pages'] = current_page.page(page_number)
    except Category.DoesNotExist:
        pass
    return render(reguest, 'category.html', context_dict)

url(r'^pagecat/(\d+)/$', views.category), # Урл для пагинации страниц

<div class="row">
        <div class="col-lg-12" align="center">
            <ul class="pagination">
                {% if pages.has_previous %}
                    <li class="arrow"><a href="/blog/category/{{ pages.previous_page_number }}/">&laquo;</a></li>
                {% else %}
                    <li class="disabled"><a href="">&laquo;</a></li>
                {% endif %}
                {% for pag in pages.paginator.page_range %}
                    {% if pag == pages.number %}
                        <li class="active"><a href="/blog/category/{{ pag }}/">{{ pag }}</a></li>
                    {% else %}
                        <li><a href="/blog/category/{{ pag }}/">{{ pag }}</a></li>
                    {% endif %}
                {% endfor %}
                {% if pages.has_next %}
                    <li class="arrow"><a href="/blog/category/{{ pages.next_page_number }}/">&raquo;</a></li>
                {% else %}
                    <li class="disabled"><a href="">&raquo;</a></li>
                {% endif %}
            </ul>
        </div>
    </div>
  • Вопрос задан
  • 466 просмотров
Решения вопроса 1
@blazer05 Автор вопроса
Переписал функцию
def category(reguest, slug):
    context_dict = {}
    try:
        category = Category.objects.get(slug=slug)
        context_dict['category_name'] = category.name
        object = BlogPost.objects.filter(category=category)
        paginator = Paginator(object, 2)

        try:
            page = request.GET.get('page')
        except:
            page = 1
        try:
            objects = paginator.page(page)
        except(EmptyPage, InvalidPage):
            objects = paginator.page(paginator.num_pages)

        context_dict['objects'] = objects
        context_dict['category'] = category
        context_dict['pages'] = paginator.page(page)

    except Category.DoesNotExist:
        pass
    return render(reguest, 'category.html', context_dict)

вывод в шаблон
<div class="row">
        <div class="col-lg-12" align="center">
            <ul class="pagination">
                {% if objects.has_previous %}
                    <li class="arrow"><a href="/blog/category/{{ objects.previous_page_number }}/">&laquo;</a></li>
                {% else %}
                    <li class="disabled"><a href="">&laquo;</a></li>
                {% endif %}
                {% for pag in objects.paginator.page_range %}
                    {% if pag == objects.number %}
                        <li class="active"><a href="/blog/category/{{ category.slug }}/?page={{ pag }}">{{ pag }}</a></li>
                    {% else %}
                        <li><a href="/blog/category/{{ category.slug }}/?page={{ pag }}">{{ pag }}</a></li>
                    {% endif %}
                {% endfor %}
                {% if objects.has_next %}
                    <li class="arrow"><a href="/blog/category/{{ objects.next_page_number }}/">&raquo;</a></li>
                {% else %}
                    <li class="disabled"><a href="">&raquo;</a></li>
                {% endif %}
            </ul>
        </div>
    </div>

урл
url(r'^category/(?P<slug>[-\w]+)/$', views.category, name='category'),

все равно дальше первой страницы не идет, хотя ссылка меняется, если навести курсор на номера страниц то идет от 1 и т.д.
127.0.0.1:8000/blog/category/django/?page=2
где косяк?

В общем сам решил, теперь все работает. Вот код который работает, возможно кому то пригодится!
Функция.
def category(reguest, slug):
    category = Category.objects.get(slug=slug)
    post = BlogPost.objects.filter(category=category)
    paginator = Paginator(post, 2)
    page = reguest.GET.get('page')
    try:
        post = paginator.page(page)
    except PageNotAnInteger:
        post = paginator.page(1)
    except EmptyPage:
        post = paginator.page(paginator.num_pages)
    return render(reguest, 'category.html', {
        'category': category,
        'page': page,
        'post': post})

Вывод в шаблон.
<div class="row">
        <div class="col-lg-12" align="center">
            <ul class="pagination">
                {% if post.has_previous %}
                    <li class="arrow"><a href="/blog/category/{{ category.slug }}?page={{ pag }}{{ post.previous_page_number }}">&laquo;</a></li>
                {% else %}
                    <li class="disabled"><a href="">&laquo;</a></li>
                {% endif %}
                {% for pag in post.paginator.page_range %}
                    {% if pag == post.number %}
                        <li class="active"><a href="/blog/category/{{ category.slug }}?page={{ pag }}">{{ pag }}</a></li>
                    {% else %}
                        <li><a href="/blog/category/{{ category.slug }}?page={{ pag }}">{{ pag }}</a></li>
                    {% endif %}
                {% endfor %}
                {% if post.has_next %}
                    <li class="arrow"><a href="/blog/category/{{ category.slug }}?page={{ pag }}{{ post.next_page_number }}">&raquo;</a></li>
                {% else %}
                    <li class="disabled"><a href="">&raquo;</a></li>
                {% endif %}
            </ul>
        </div>
    </div>

Урл
url(r'^category/(?P<slug>[-\w]+)/$', views.category, name='category'),
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы