2

django-endless-paginationのドキュメントを読むと、ちょうど@page_template()デコレータを使用して、Ajaxページング機能をクラスベースのビューに拡張できます。 。 私は時間のように使用するためのものデコレータを実装しようとしてきた:django-endless-paginationをListViewを拡張したカスタムCベースのビューで使用する

class ExtendedListView(ListView): 
    template_name = 'global_template.html' 

    @method_decorator(@page_template('path_to_updatable_content_only_template')) 
    def dispatch(self, *args, **kwargs): 
     return super(ExtendedListView, self).dispatch(*args, **kwargs) 

ビュー関数の出力は、すべてのエラーをしませんが、私は別のページに移動するときには、ターゲットに「global_template」をロードし、デコレータで定義されたテンプレートではありません。

この実装が実際に機能しているかどうか知っていて、何か間違いを指摘してください、私はそれを正しい方法で使用してうれしく思います。

class ExtendedListView(ListView): 
    template_name='global_template_path' 

    ''' 
    render_to_response ¿hack? so that i can render only the updatable DOM part template 
    ''' 
    def render_to_response(self, context): 
     if self.request.is_ajax(): 
      self.template_name = 'path_to_updatable_content_only_template' 
      return super(ExtendedListView, self).render_to_response(context) 
     else: 
      return super(ExtendedListView, self).render_to_response(context) 

乾杯:この同じ問題を持って、あなたがこれを行うことができ、このへの適合答えはありませんsomeoeneのので、もし

私はworkarroundを思い付くことができました! book.htmlで

# views.py 
from endless_pagination.views import AjaxListView  
class BookView(AjaxListView): 
    context_object_name = "books" 
    model = Book 

    template_name = 'books.html' 
    page_template = 'books_list.html' 

答えて

3

公式には、このタスクを行うにAjaxListViewを使用することができます

{% extends 'base.html' %} 


{% block js %} 
    {{ block.super }} 
    <script src="/static/js/jquery.js" type="text/javascript" charset="utf-8"></script> 
    <script src="/static/js/endless.js" type="text/javascript" charset="utf-8"></script> 
{% endblock %} 

{% block content %} 

<div class="endless_page_template"> 

    {% include page_template %} 
</div> 

{% endblock %} 

を、これはそれが実際ですbooks_list.html

{% load endless %} 

{% paginate books %} 

{% for book in books %} 
    {{ book.title }} 
{% endfor %} 

<div class="pagination"> 

    {% show_pages %} 
</div> 
+0

私の問題は、複数のページネーションを動作させることです。 – acjay

1

ですAjaxの実装がどのように機能するかはかなり複雑です。ジェネリック・ビュー、Ajax、および複数のページ区切りを使用したいので、私自身のソリューションをロールバックしなければなりませんでした。それを動作させる方法を理解するために、コード、例のジャンゴエンドレスページネーションデコレータ、およびDjangoのビュー自体をリバースエンジニアリングする必要がありました。自分のソリューションをローリングする過程で、少し単純化しましたが、おそらくさらに単純化することができます。おそらく、これは他の人にとっては役に立つかもしれません:

class SearchView(View): 
    """ 
    Based on code from django-endless-pagination, modified for multiple 
    pagination views on the same page 
    """ 

    template = 'app/search.html' 
    page_templates = {'object1Page': 'app/search_object1_pane.html', 
    'object2Page': 'app/search_object2_pane.html'} 

    def get_context_data_and_template(self, **kwargs): 
     context = {'params': kwargs} 

     # Check whether AJAX has made a request, if so, querystring_key will be 
     # set, identifying which paginator to render 
     querystringKey = self.request.REQUEST.get('querystring_key') 
     template = self.page_templates.get(querystringKey) 
     # switch template on ajax requests 
     if not (self.request.is_ajax() and template): 
      template = self.template  
     context['page_template'] = template 

     # Always generate the QuerySets that will be paginated 
     if self.request.GET['query']: 
      searchTerm = self.request.GET['query'] 
     else: 
      searchTerm = kwargs['search'] 

     # *** Insert your search code here *** 

     context['object1Results'] = object1QuerySet 
     context['object2Results'] = object2QuerySet 

     extraContext = self.kwargs.get("extra_context", {}) 
     context.update(extraContext) 

     return context, template 

    def get(self, request, *args, **kwargs): 
     context, template = self.get_context_data_and_template(**kwargs) 
     return TemplateResponse(request=self.request, 
      template=template, 
      context=context) 
関連する問題