2013-12-14 2 views
4

Я нахожусь в своем первом проекте с фреймворком Django, и я решил создать блог, так как его легко найти в Интернете. Затем я узнал о модуле Paginator и решил использовать его. Проблема в том, что всякий раз, когда я добавляю сообщение, он доходит до конца базы данных, поэтому у меня есть блог, который пока покажет старые сообщения.list.reverse() не работает должным образом в Django

Из-за того, что я решил использовать .reverse(), например:

def index(request): 
    posts = Post.objects.all() 
    posts.reverse() 
    paginator = Paginator(posts, 2) 

    try: 
     page = int(request.GET.get("page", "1")) 
    except ValueError: 
     page = 1 

    try: 
     posts = paginator.page(page) 
    except (InvalidPage, EmptyPage): 
     posts = paginator.page(paginator.num_pages) 

    return render_to_response('index.html', { 
              'Posts': posts, 
              'Sideposts': Sidepost.objects.all(), 
              }) 

Единственная проблема, это не работает, по крайней мере, не с Paginator. Когда я перестаю использовать Paginator, он работает, но в противном случае это не так.

Я думаю, что это действительно странное поведение, и я осмотрелся, но не смог найти ничего, что помогло мне с этой проблемой. Я что-то делаю неправильно?

ответ

6

Пусть база данных сделать заказ:

posts = Post.objects.all().order_by('-id') 

Конечно, было бы лучше использовать поле даты или что-то.

+0

Это тоже работает, спасибо! – AugustoQ

+1

Это лучше, потому что это позволит разбиению на страницы загружать только то, что вам нужно для страницы. Кастинг в список загружает все в запросе. – joshua

2

Во-первых, Post.objects.all() не возвращает объект списка, а объект запроса.

И reverse метод не меняет сам запрос, но возвращает обратную версию запроса.

Преобразуйте его в список posts = list(Post.objects.all()), чтобы использовать reverse способ, если хотите объект списка.

Возможно следующее является более предпочтительным:

posts = Post.objects.all().reverse() 
+0

Если у него не было метода 'reverse', проблема не была бы выполнена? – thefourtheye

+0

Это сработало, спасибо! Что касается второй части, так как я хочу сортировать свои сообщения по времени, и каждый раз, когда я добавляю новый, он идет до конца базы данных, не должно быть достаточно просто .reverse() 'для моих целей? – AugustoQ

+0

@thefourtheye, Ты прав. Я обновил ответ. Спасибо за комментарий. – falsetru

Смежные вопросы