Ahmed Yasin
Ahmed Yasin

Reputation: 948

Infinite scroll bar is not working with django

It has been a long time when I asked this question and still didn't get an answers. I am trying to add infinite scroll down with Django but it is not working fine with the following code. I just paginating post by 10 and then its just showing me loading icon .it is not working when i am scrolling down. Can you guys figure it out what is wrong here ?

views.py

class PostListView(ListView):
    model = Post
    context_object_name = 'post_list' 
    paginate_by = 10

    def get_queryset(self):
        return Post.objects.filter(create_date__lte=timezone.now()).order_by('-create_date')

postlist.html

{% extends 'base.html' %}
{% block content %}


 <div class="container">
                <div class="row infinite-container">
                    {% for post in post_list%}
                        <div class="col-md-6 infinite-item">
                            <div class="card mb-4 shadow-sm">
                                <img class="img-thumbnail"  src="{{post.image.url}}"/>
                                <div class="card-body">
                                    <h5>{{post.title}}</h5>
                                    <p class="card-text">
                                        {{post.description|truncatewords:20}}
                                    </p>
                                </div>
                            </div>
                        </div>
                    {% endfor %}
                </div>
                {% if page_obj.has_next %}
                true #this is showing me true it also means that it has next page.
                <a class="infinite-more-link" href="?page={{page_obj.next_page_number}}"></a>
                {% endif %}
                <div class="d-flex justify-content-center" style="display:none;">
                    <div class="spinner-border" role="status">
                        <span class="sr-only">Loading...</span>
                    </div>
                </div>
            </div>

 <script src="/static/js/jquery-2.2.4.min.js"></script>
    <script src="/static/js/jquery.waypoints.min.js"></script>
    <script src="/static/js/infinite.min.js"></script>
    <script>
    var infinite = new Waypoint.Infinite({
        element: $('.infinite-container')[0],
        handler: function(direction) {

    },
    offset: 'bottom-in-view',

    onBeforePageLoad: function () {
    $('.spinner-border').show();
    },
    onAfterPageLoad: function () {
    $('.spinner-border').hide();
    }

    });

    </script>


{% endblock content %}

if more information is require than tell me in a comment session i will update my question with that information.

Upvotes: 6

Views: 590

Answers (1)

Ahmed Yasin
Ahmed Yasin

Reputation: 948

I was missing loading the static so load that by adding

{% load static%}

below the content block

<script src="{% static '/static/js/jquery-2.2.4.min.js'%}"></script>
    <script src="{% static '/static/js/jquery.waypoints.min.js'%}"></script>
    <script src="{% static '/static/js/infinite.min.js'%}"></script>

Upvotes: 4

Related Questions