Soor ka bacha
Soor ka bacha

Reputation: 87

pagination not showing in Django

Hi im new to django and am trying to set up pagination but its not working i don't know why. this is my code for the project. paginator is working it is limiting to 5 but just not showing the pages number. when i type ?page=2 in the address bar it works what am i doing wrong please help.

in my view class

def post_list(request):
    queryset = Post.objects.all().order_by("-timestamp")
    paginator = Paginator(queryset, 5) # Show 5contacts per page
    page_request_var = "page"
    page = request.GET.get(page_request_var)
    try:
        queryset = paginator.page(page)
    except PageNotAnInteger:
    # If page is not an integer, deliver first page.
        queryset = paginator.page(1)
    except EmptyPage:
    # If page is out of range (e.g. 9999), deliver last page of results.
        queryset = paginator.page(paginator.num_pages)

    context = {
        "object_list": queryset,
        "page_request_var": page_request_var,

}
return render(request, "community.html", context)

in my template

 <div class="container">
    {% for obj in object_list %}
    <div class="row">
        <div class="col-sm-4 col-md-4">
            <div class="post">
                <div class="post-img-content">
                    <img src="http://placehold.it/460x250/e67e22/ffffff&text=HTML5" class="img-responsive" />
                    <span class="post-title"><b><a href='{{ obj.get_absolute_url }}'>{{ obj.title }}</a></b><br />
                    </span>
                </div>
                <div class="content">
                    <div class="author">
                        By <b>changeme</b> |
                        <small> {{ obj.timestamp|timesince }} ago</small>
                    </div>
                    <div>
                        {{ obj.content|linebreaks|truncatechars:120 }}
                    </div>
                    <div>
                        <a href="{{ obj.get_absolute_url }}" class="btn btn-warning btn-sm">Read more</a>
                    </div>
                    <hr />
                </div>
            </div>
        </div>


    </div>
    {% endfor %}
    </div>
    <div class="container"> 

    <div class="pagination">
    <span class="step-links">
        {% if queryset.has_previous %}
            <a href="?{page_request_var}=1">&laquo; first</a>
            <a href="?{page_request_var}={{contacts.previous_page_number}}">previous</a>
        {% endif %}

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

        {% if queryset.has_next %}
            <a href="?{page_request_var}={{queryset.next_page_number}}">next</a>
            <a href="?{page_request_var}={{queryset.paginator.num_pages }}">last &raquo;</a>
        {% endif %}
    </span>
</div>
</div>

it just shows pages of. what am i doing wrong ?

Upvotes: 1

Views: 1408

Answers (1)

user1301404
user1301404

Reputation:

You're using queryset in your template even though you don't have it in your context. As you can see, you're setting queryset to object_list.

context = {
    "object_list": queryset,
    "page_request_var": page_request_var,

}

Simply, use object_list rather than queryset in your template.

or change object_list to queryset

context = {
    "queryset": queryset,
    "page_request_var": page_request_var,

}

Upvotes: 4

Related Questions