我正在尝试使用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 %}
答案 0 :(得分:1)
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页面上。这是为了更小的结果大小。为了获得更大的结果,您可能希望使用类似光标的东西。