jquery – Django Lazy Loading Pagination

我试图使用
Django Endless Pagination来实现Twitter / Instagram风格分页的效果,其中一旦用户滚动到页面的底部,则将新内容加载到页面上.使用上面的模块,我已经能够这样做.但是,我有一个与性能相关的问题.我发送数据的视图仍然从数据库中加载所有行.仅在模板侧,显示其一部分.

class IndexView(BaseAjaxViewList):
    template_name = 'polls/index.html'
    page_template = 'polls/item_index.html'
    context_object_name = 'data'
    model = Question

    def get_context_data(self,**kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        print(len(context["data"]))
        return context

我认为只有’n’个项目可以从数据库访问,当滚动发生时会有另一个db调用等等,这可以提高页面的加载性能.假设页面中有1000个项目,那么理想情况下我想要首先加载项目(50个项目在1 db调用中访问)然后一旦用户滚动并到达页面底部然后接下来50个项目应访问和显示项目.但是,我试图检查场景下面,似乎所有1000次调用都是使用此模块一次完成的.仅在模板侧,一次显示50个.这是真的?有没有任何django模块可以做到这一点,或者我必须编写自己的ajax调用等?

供参考的模板如下:

主模板

 <h2>Polls:</h2>
    {% include page_template %}

    {% block js %}
        {{ block.super }}
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script src="{% static 'endless_pagination/js/endless-pagination.js' %}"></script>
        <script>$.endlessPaginate();</script>
    {% endblock %}

page_template:

{% load endless %}

{% paginate entries %}
{% for entry in entries %}
    {# your code to show the entry #}
{% endfor %}
{% show_more %}

最佳答案 Django Ajax允许您对Django视图进行Ajax调用.您可以将结果包装在列表中,然后缓存该结果.从那里开始渲染视图时,只需弹出前50个(或任何您想要设置的大小).然后在Ajax调用上弹出缓存.

就像是:

@django_ajax
def paginated_cache(request):
    more_results = [cache.get('your_results').pop() for result in range(50)]
    # turn this to json, wrap in dictionary and return

更详细的说明在django ajax页面上.这是为了更小的结果大小.为了获得更大的结果,您可能希望使用类似光标的东西.

点赞