【问题标题】:Reversing results for current page (django paginator generic view)反转当前页面的结果(django paginator 通用视图)
【发布时间】:2017-04-29 10:37:49
【问题描述】:

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

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

如您所见,如果reverse 在问号后面的 URL 中,我想用相同的列表覆盖 article_list,但方向相反。我通过'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 %}

不知道有没有更好的解决办法。

【问题讨论】:

  • @knbk 这正是我想要的。我不想在分页之前反转。

标签: django django-pagination


【解决方案1】:

试试这个

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

【讨论】:

  • 我在get_context_data 中试过这个:if 'reverse' in self.request.GET: article_list.object_list = reversed(article_list.object_list) context['article_list'] = article_list。我收到一个错误:object of type 'reversed' has no len()
  • 谢谢提示,应该是article_list.object_list.reverse(),而不是reversed
  • queryset.reverse() 与分页器使用的切片一起可以更改查询集中的项目。要保持相同的结果但反转它们,您需要使用reversed() 并将其转换为列表,因此:list(reversed(article_list.object_list))
  • @L_S 不幸的是没有:( 它反转了所有内容,不仅是当前页面。这意味着,第一项现在是最后一页上的最后一项,而不是第一页上的最后一项。
猜你喜欢
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 2017-03-18
  • 1970-01-01
相关资源
最近更新 更多