Бесконечная разбиение на страницы загружает все содержимое страницы на прокрутке


Я пытаюсь реализовать непрерывную пагинацию на свитке с помощью django-endless-pagination.

Первоначальный рендеринг страницы работает нормально. Однако после прокрутки содержимое html-страницы целиком загружается в файл endless_page_template div, а не желаемое частичное содержимое html из файла page_template. В результате получается что-то вроде смотрения в зеркало, которое отражает другое зеркало за ним. Я считаю, что возвращенный queryset является правильным, потому что результаты разбиения на страницы верны, если не пытаться использовать "paginateOnScroll".

Соответствующие части моей точки зрения приведены ниже. Я использую CreateView, потому что у меня есть форма комментариев на той же странице, что и разбитые на страницы комментарии.
class MyIndex(CreateView):
    form_class = CommentForm
    template_name = 'my/index.html'
    page_template = 'my/comments.html'

    def get_context_data(self, **kwargs):
        context = super(MyIndex, self).get_context_data(**kwargs)
        context.update({
            'comments': Comment.objects.order_by('-id').filter(parent=None),
            'page_template': self.page_template,
        })

        return context

Соответствующие части моего / индекса.html шаблон (основной шаблон)

<script src="{% static 'endless_pagination/js/endless-pagination.js' %}"></script>
<script type="text/javascript">
    $.endlessPaginate({
        paginateOnScroll: true
    });
</script>

<div class="endless_page_template">
    {% include page_template %}
</div>

Соответствующие части моих / комментариев.формате HTML (page_template)

{% load endless %}

{% paginate comments %}
{% for comment in comments %}
    <span class="lead">{{ comment.name }}</span>
    {{ comment.message}}

    {% if not forloop.last %}
        <hr />
    {% endif %}
{% endfor %}
<br />

<div class="row-fluid">
    <div class="span8 offset2 pagination-centered">
        {% show_more %}
    </div>
</div>

Спасибо!

1 2

1 ответ:

У меня была та же проблема, и я исправил ее, явно добавив проверку is_ajax в views.py файл, например:

class MyIndex(CreateView):
    form_class = CommentForm
    template_name = 'my/index.html'
    page_template = 'my/comments.html'

    def get(self, request, *args, **kwargs):
        if request.is_ajax():
            self.template_name = self.page_template
        return super(MyIndex, self).get(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(MyIndex, self).get_context_data(**kwargs)
        context.update({
            'comments': Comment.objects.order_by('-id').filter(parent=None),
            'page_template': self.page_template,
        })

        return context

Вам также может потребоваться использовать render/render_to_response вместо возврата метода get по умолчанию, хотя это зависит от того, как структурирована ваша страница.