0

Twitter スタイルの ajax ジェネリック ビューの endless_pagination から良い結果が得られません。

以下のリンクされた質問のように、スクロール (または「詳細」をクリック) すると、正しくページ分割された結果が読み込まれますが、親テンプレートはpage_template. つまり、合計 4 つのリスト要素があるとしENDLESS_PAGINATION_PER_PAGE = 2ます。ページの読み込み時に、最初の 2 つの要素が表示されます。下にスクロールすると、ページ全体がリストの div に再度読み込まれ、その div のpage_templatediv には次の 2 つのリスト要素が含まれます。次のページに相当する要素を追加して、リストを再レンダリングするにはどうすればよいですか?

部分テンプレート:

{# 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ます。2 番目objects.html_fullList.htmlレンダリングでは、正しい 2 つのオブジェクトがあります。

docsに基づいて、明示的なis_ajax呼び出しを気にする必要さえありません。

この修正は私にはうまくいきませんでした-また、なぜそれが必要なのですか?

4

1 に答える 1

0

私の場合、問題は一般的なリストビューの未投稿のコードにありました.メソッドは、レンダリングするテンプレートとして最終的に使用されると思われるget_template_namesプロパティに干渉していました. template_nameendless_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 に答える