反转当前页面的结果(django paginator通用视图)

时间:2017-04-29 10:37:49

标签: django django-pagination

我在我的通用视图中使用标准的django paginator,如下所示:

def get_context_data(self, **kwargs):
        context = super(ArchivePagedView, self).get_context_data(**kwargs) 
        article_list = Article.published
        #=====================================
        paginator = Paginator(article_list, self.paginate_by)
        page = self.request.GET.get('page')

        try:
            article_list = paginator.page(page)
        except PageNotAnInteger:
            article_list = paginator.page(1)
        except EmptyPage:
            article_list = paginator.page(paginator.num_pages)


        if 'reverse' in self.request.GET:
            article_list = article_list.reverse() #This doesn't work!
        else:
            article_list = article_list.all()

        context['article_list'] = article_list

        return context

正如您所看到的,我希望使用相同的列表覆盖article_list,但如果reverse位于问号后面的URL中,则反方向。我通过'reverse' in self.request.GET获得的信息。 但我收到一个错误:AttributeError: 'Page' object has no attribute 'reverse'。我该怎么扭转这个? (我不想在我的模板中包含重复的代码。)

在我通过制作一个额外的context变量(context['reverse'])来解决此问题之前,该变量说明列表是否应该反转,然后我使用了这样的重复代码:

{% if reverse %}
 {% for article in article_list reversed %}
  ... some code
 {% endfor %}
{% else %}
 {% for article in article_list %}
  ... the same code
 {% endfor %}
{% endif %}

我想知道是否没有更好的解决方案。

1 个答案:

答案 0 :(得分:0)

试试这个

article_list.object_list = list(reversed(article_list.object_list))