Estoy usando el paginador django estándar en mi vista genérica como esta:
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 Como puede ver, quiero anular article_list con la misma lista, pero en dirección inversa, si reverse está en la URL detrás del signo de interrogación. Esa información la obtengo 'reverse' in self.request.GET . Pero aparece un error: AttributeError: 'Page' object has no attribute 'reverse' . ¿Cómo revierto esto? (No quiero tener código duplicado en mi plantilla).
Antes de arreglar esto, hice una variable de context adicional ( context['reverse'] ) que dice si la lista debe invertirse o no, y luego utilicé un código duplicado como este:
{% if reverse %} {% for article in article_list reversed %} ... some code {% endfor %} {% else %} {% for article in article_list %} ... the same code {% endfor %} {% endif %}Me pregunto si no había una solución mejor.
Prueba esto
article_list.object_list = list(reversed(article_list.object_list))