2016-08-20 2 views
0

ページネーションと秩序:Djangoの私は、一般的なリストビューに発注し、ページネーションを実装している

class CarList(LoginRequiredMixin, ListView): 
    model = Car 
    paginate_by = 30 

    ordering = 'car_id_internal' 

    def get_ordering(self): 
     return self.request.GET.get('ordering', 'car_id_internal') 

そして、私のテンプレートで:

<thead> 
     <tr> 
      <th><a href="{% url 'car_list' %}?ordering=car_id_internal">Internal car ID</a></th> 
      <th><a href="{% url 'car_list' %}?ordering=type">Type</a></th> 
      <th><a href="{% url 'car_list' %}?ordering=brand">Brand</a></th> 
     </tr> 
    </thead> 

とテンプレートで改ページ:

{# .... **Now the pagination section** .... #} 
{% if is_paginated %} 
    <div class="pagination" style="width:100%"> 
     <span class="page-links"> 
      <div class="col-sm-2"> 
      {% if page_obj.has_previous %} 
       <a href="/feriehus?page={{ page_obj.previous_page_number }}">Forrige side</a> 
      {% endif %} 
      </div> 
      <div class="col-sm-2"> 
      <span class="page-current"> 
       Side {{ page_obj.number|unlocalize }} af {{ page_obj.paginator.num_pages|unlocalize }} 
      </span> 
      </div> 
      <div class="col-sm-2"> 
      {% if page_obj.has_next %} 
       <a href="/feriehus?page={{ page_obj.next_page_number }}">Næste side</a> 
      </div> 
      {% endif %} 
     </span> 
    </div> 
{% endif %} 

これはうまくいきますが、次のページをクリックすると、car_id_internalの順序が逆になります。私は、次のページに行くときに、タイプなどの最初のページで選択された順序を維持したいと思います。これはDjangoで可能ですか? 私はDjango 1.9を使用しています。

誰かが助けてくれることを願っています。

答えて

2

あなたはテンプレートに現在の順序値を渡すと、次/前のページリンクでそれを使用する必要があります。

class CarList(LoginRequiredMixin, ListView): 
    def get_context_data(self, *args, **kwargs): 
     context = super(CarList, self).get_context_data(*args, **kwargs) 
     context['current_order'] = self.get_ordering() 
     return context 

...

<a href="/feriehus?ordering={{ current_order }}&page={{ page_obj.previous_page_number }}"> 

のように。

+0

驚くばかりです。どうもありがとうございます! – Wessi

関連する問題