我试图使用
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页面上.这是为了更小的结果大小.为了获得更大的结果,您可能希望使用类似光标的东西.