【发布时间】: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 这正是我想要的。我不想在分页之前反转。