无限的分页在滚动时加载整个页面内容

时间:2013-12-10 02:38:39

标签: django infinite-scroll django-endless-pagination

我正在尝试使用django-endless-pagination在滚动上实现连续分页。

页面的初始渲染工作正常。但是,滚动后,整个 html页面内容将加载到endless_page_template div中,而不是page_template中所需的部分html内容。结果有点像在镜子里面反射另一面镜子。我相信返回的查询集是正确的,因为在不尝试使用“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

my / index.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>

my / comments.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 个答案:

答案 0 :(得分:5)

我遇到了同样的问题,并通过在views.py文件中显式添加is_ajax检查来修复它,例如:

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方法,这取决于页面的结构。