我在通用ListView中实现了排序和分页:
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。
我希望有人可以提供帮助。
答案 0 :(得分: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 }}">
等等。