我没有从endless_pagination twitter风格的ajax通用视图中获得好结果。
在下面的链接问题中,当我滚动(或单击“更多”)时,会加载正确分页的结果,但父模板会加载到应包含page_template
的div中。也就是说,我总共有4个列表元素,ENDLESS_PAGINATION_PER_PAGE = 2
。在页面加载时,它显示前两个元素。当我向下滚动时,它会在列表的div中再次加载整个页面,而div的page_template
div包含接下来的两个列表元素。我如何才能只是重新呈现列表,添加下一页的元素?
部分模板:
{# myApp/_fullList.html #}
{% load endless %}
{% lazy_paginate objektz_list %}
{% for object in objektz_list %}
<div class="row object-summary-card">
...
</div>
{% endfor %}
父母:
{# objects.html #}
{% block js %}
{{ block.super }}
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="{{ STATIC_URL }}endless_pagination/js/endless-pagination.js"></script>
<script>$.endlessPaginate({paginateOnScroll: true});</script>
{% endblock %}
<div class="row show-for-medium-up ">
{% block landingWidget %}
{% include "objects_list/_whatsHotSlider.html" %}
{% endblock landingWidget %}
</div>
<div class="row">
<div class="small-12 large-7 columns endless_page_template">
{% block objects_list %}
{% include "objects_list/_fullList.html" %}
{% endblock objects_list %}
</div>
<div class="show-for-medium-up large-5 columns">
{% block deals %}
{% include "objects_list/_deals.html" %}
{% endblock deals %}
</div>
</div>
意见:
class AObjectListView(AjaxListView):
model = Object
page_template = 'objects_list/_fullList.html'
context_object_name = 'objektz_list'
template_name = 'objects_list/objects.html'
def get(self, request, *args, **kwargs):
if request.is_ajax():
self.template_name = self.page_template
return super(AObjectListView, self).get(request, *args, **kwargs)
因此,回顾一下,onscroll会触发ajax请求,该请求会点击AObjectListView
并调用get
;这会在objects.html
占用的位置再次呈现_fullList.html
。在第二个objects.html
的{{1}}渲染中,它确实有两个正确的对象。
基于the docs,我甚至不必为明确的_fullList.html
电话打扰。
这fix对我不起作用 - 为什么这有必要呢?
答案 0 :(得分:0)
就我而言,问题出在通用列表视图的一些未发布的代码中:方法get_template_names
干扰了属性template_name
,这似乎是最终用作渲染模板的内容按endless_pagination
。
特别是,列表视图已设置为在代理模型上调度到所需模板,代理模型具有属性&#39;。
def get_template_names(self):
return ('objects_list/{}s.html'.format(self.object_list[0].kind),
'objects_list/objects.html')
然后,解决方法是执行与`get:类似的操作
def get_template_names(self):
if self.request.is_ajax():
return self.template_name
return ('objects_list/{}s.html'.format(self.object_list[0].kind),
'objects_list/objects.html')
请注意,覆盖get
仍然很重要,如果它是ajax请求,请设置self.template_name = self.page_name
。