Home > Enterprise >  My pagination in Category pages is not working
My pagination in Category pages is not working

Time:09-14

I made a blog app in which I want to add pagination both on home page and category page. but after a lot of efforts I didn't get how to use it in the category page. I use 2 parameters in category view and I don' know how to fix it now. whenever I click on category "That page number is not an integer" displays.

views.py:

def allpost(request):
    postData = Post.objects.all()
    paginator = Paginator(postData, 5)  # Show 5 contacts per page.

    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
    return render(request, 'posts.html', {'page_obj': page_obj})




def CategoryView(request, cats='category__title'):
    category_posts = Post.objects.all()
    paginator = Paginator(category_posts, 5)  

    # We don't need to handle the case where the `page` parameter
    # is not an integer because our URL only accepts integers
    try:
        category_posts = paginator.page('cats')
    except EmptyPage:
        # if we exceed the page limit we return the last page
        category_posts = paginator.page(paginator.num_pages)

    return render(request, 'categories.html', {'category_posts': category_posts})

urls.py:

path('category/<str:cats>/', views.CategoryView, name ="category"),

categories.html

{% extends 'base.html' %}



{%block content%}

<h1> Category: {{ cats }} </h1>

{% for post in category_posts %}
   
<div >
    <div >
        <div >
          <div >
            <div >
              <strong >{{ post.category }}</strong>
              <h3 >
                <a  href="{% url 'detail' post.id %}">{{post.title}}</a>
              </h3>
              <div >{{ post.public_date }}</div>
              <p >{{ post.summary }}</p>
              <a href="{% url 'detail' post.id %}">Continue reading</a>
            </div>
            <img  data-src="holder.js/200x250?theme=thumb" alt="Thumbnail [200x250]" style="width: 200px; height: 250px;" src="data:image/svg xml;charset=UTF-8,<style type="text/css">#holder_182c981dfc3 text { fill:#eceeef;font-weight:bold;font-family:Arial, Helvetica, Open Sans, sans-serif, monospace;font-size:13pt } </style>Thumbnail" data-holder-rendered="true">
          </div>
        </div>

    </div>
</div>

{% endfor %}

{% include 'pagination.html' %}

{%endblock%}

pagination.html

<div >

<nav aria-label="Page navigation example">
  <ul >

  {% if page_obj.has_previous %}

    <li ><a  href="/?page=1">First</a></li>
    <li ><a  href="/?page={{ page_obj.previous_page_number }}">Previous</a></li>

    {% endif %}


    <li ><a  href="/?page={{ page_obj.number }} of {{ page_obj.paginator.num_pages }}">1</a></li>



    {% if page_obj.has_next %}

    <li ><a  href="/?page={{ page_obj.next_page_number }}">Next</a></li>
    <li ><a  href="/?page={{lastpage}}">Last</a></li>

    {% endif %}

</div>

I am very confused already in category views function to use parameter issue. so that I didn't use that code in pagination.html.

CodePudding user response:

===== in view.py ======

from django.core.paginator import Paginator

def HomeView(request):
    show_data = VehicleModel.objects.all() # Queryset For pagiantion
    # Pagination code start
    paginator = Paginator(show_data, 3, orphans=1)
    page_number = request.GET.get('page')
    show_data = paginator.get_page(page_number)
    # Pagination code end
    context = {'page_number':page_number}
    return render(request,'dashboard.html',context)

===== in html file ======

<!-- Pagination Block with page number  -->
<div >
    <div >
        <span >

            {% if carset.has_previous %} # <!-- For Previous Button -->
            <a  href="?page={{carset.previous_page_number}}&ok=#ok">Previous</a>
            {% endif %}


            <span>{% for pg in carset.paginator.page_range %} # <!-- For Page Numbers Buttons -->
                {% if carset.number == pg %}
                <a href="?page={{pg}}" >
                    <span >{{pg}}</span>
                </a>
                {% else %}
                <a href="?page={{pg}}" >
                    <span >{{pg}}</span>
                </a>
                {% endif %}
                {% endfor %}</span>

            {% if carset.has_next %} # <!-- For Next Button -->
            <a  href="?page={{carset.next_page_number}}&ok=#ok">Next</a>
            {% endif %}
        </span>
    </div>

</div>

CodePudding user response:

=========== Your code is like this ============== here you passed the category parameter in the function so must pass the category title with the calling URL of this CategoryView(request, cats='category__title') function

def CategoryView(request, cats='category__title'):
    category_posts = Post.objects.all()
    paginator = Paginator(category_posts, 5) 

with this CategoryView(request, cats='category__title') you want all Posts ???

def

 CategoryView(request, cats='category__title'):
    category_posts = Post.objects.filter(cats__title = cats)
    paginator = Paginator(category_posts, 5)

ator = Paginator(category_posts, 5)

  • Related