父模板由endless_pagination加载,而不是page_template

时间:2014-09-25 00:02:50

标签: jquery ajax django django-endless-pagination

我没有从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对我不起作用 - 为什么这有必要呢?

1 个答案:

答案 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