当前页面的反转结果(django 分页器通用视图)
Reversing results for current page (django paginator generic view)
我在我的通用视图中使用标准的 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
如您所见,我想用相同的列表覆盖 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 %}
不知道有没有更好的办法
试试这个
article_list.object_list = list(reversed(article_list.object_list))
我在我的通用视图中使用标准的 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
如您所见,我想用相同的列表覆盖 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 %}
不知道有没有更好的办法
试试这个
article_list.object_list = list(reversed(article_list.object_list))