Django用分页排序

时间:2016-08-20 08:14:08

标签: django python-3.x pagination django-views

我在通用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。

我希望有人可以提供帮助。

1 个答案:

答案 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 }}">

等等。