0

我没有从 never_pagination twitter 风格的 ajax 通用视图中得到好的结果。

如下面的链接问题所示,当我滚动(或单击“更多”)时,会加载正确分页的结果,但父模板会加载到应该包含page_template. 也就是说,假设我总共有 4 个列表元素,并且ENDLESS_PAGINATION_PER_PAGE = 2. 在页面加载时,它会显示前两个元素。当我向下滚动时,它会在列表的 div 中再次加载整个页面,并且该 div 的page_templatediv 包含接下来的两个列表元素。我如何让它重新渲染列表,添加下一页的元素?

部分模板:

{# 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_fullList.html渲染中,它确实有正确的两个对象。

根据文档,我什至不必为显式is_ajax调用而烦恼。

这个修复对我不起作用——还有,为什么有必要这样做?

4

1 回答 1

0

就我而言,问题出在通用列表视图的一些未发布代码中:该方法get_template_names干扰了属性,该属性template_name似乎最终被用作模板来呈现endless_pagination

特别是,列表视图被设置为在具有属性“kind”的代理模型上分派到所需的模板。

 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')

请注意,如果它是一个 ajax 请求,覆盖get和设置它仍然很重要。self.template_name = self.page_name

于 2014-09-25T18:06:05.683 回答