Django Paginator вызывает TypeError

Я пытаюсь использовать модуль разбивки на страницы django, в том числе в стандартном дистрибутиве версии 1.3.

При попытке загрузить страницу, которая в настоящее время управляется нумерацией страниц, если я не включу ?page= в uri, она выдает TypeError. У меня никогда не было такой ситуации раньше, и не вижу причин для этого.

Вот мой текущий вид:

paginator = Paginator(mails_list, 25) # Shows 25 mails per page

page = request.GET.get('page')
try:
    mails = paginator.page(page)
except PageNotAnInteger:
    # If page is not an integer, deliver the first page.
    mails = paginator.page(1)
except EmptyPage:
    # If page is out of range (e.g. 9999), deliver last page of results
    mails = paginator.page(paginator.num_pages)

Ошибка типа:

int() argument must be a string or a number, not 'NoneType'

Ошибка представлена ​​​​из строки 3 приведенного выше кода:

mails = paginator.page(page)

Кто-нибудь сталкивался с этой ошибкой раньше и/или знает, как ее исправить?


person Llanilek    schedule 11.11.2011    source источник
comment
исключения PageNotAnInteger и EmptyPage не должны его проверять?   -  person    schedule 08.02.2012


Ответы (2)


Попробуйте изменить эту строку:

page = request.GET.get('page')

К этому:

page = request.GET.get('page', '1')

Проблема в том, что вы получаете несуществующий параметр. Индексирование с использованием [] приведет к KeyError, но метод get возвращает None, если он не существует. Пагинатор вызывает int(None), что не удается.

Второй параметр метода get по умолчанию возвращается, если ключ не существует, а не None. Я прошел '1', на котором int не должен провалиться.

person icktoofay    schedule 11.11.2011
comment
Работает мечта. Спасибо за быстрый ответ. Теперь меня беспокоит то, что я сделал это точно так, как показано в документации. Почему это не работает так, как должно? - person Llanilek; 11.11.2011
comment
@Neil: Очевидно, вы используете более новую документацию, чем ваша установка Django. Очевидно, это было исправлено в версии 16026. - person icktoofay; 11.11.2011
comment
@Neil: Если вы посмотрите на документацию для последней стабильной версии, вы увидите, что они предоставляют по умолчанию get в своем примере. - person icktoofay; 11.11.2011
comment
Это объяснило бы многое. Спасибо! - person Llanilek; 11.11.2011

get = self.request.GET
page = int(get.get('page'))

вы должны преобразовать строку в int или

 page = int(request.GET.get('page'))

ты можешь это сделать. Оба бегут.

person okan kilic    schedule 12.12.2012