2017-04-06 170 views
0
>>> objects = ['john', 'paul', 'george', 'ringo'] 
>>> p = Paginator(objects, 2) 
>>> p.count 
4 
>>> p.num_pages 
2 
>>> page1 = p.page(1) 
>>> 
>>> page1.previous_page_number() 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "C:\Users\Rick\ws2\env\lib\site-packages\django\core\paginator.py", line 136 
, in previous_page_number 
    return self.paginator.validate_number(self.number - 1) 
    File "C:\Users\Rick\ws2\env\lib\site-packages\django\core\paginator.py", line 38, 
in validate_number 
    raise EmptyPage('That page number is less than 1') 
django.core.paginator.EmptyPage: That page number is less than 1 
>>> 

根據previous_page_number()文檔。由previous_page_number()方法引發的意外異常 - Django Paginator

Page.previous_page_number()

返回先前的頁碼。如果前一頁不存在,則引發InvalidPage

我期待previous_page_number()提高InvalidPage例外,如文件所述。爲什麼它返回EmptyPage異常?

我錯過了什麼?

+0

您正在使用哪個django版本? –

+0

我正在使用django 1.10 – Cody

+0

但是無效異常真的很重要嗎?你可以改爲使用has_previous來檢查前一頁而不是previous_page_number吧? –

回答

0

根據分頁程序源(django.core.paginator.py)在1.10:

def validate_number(self, number): 
    """ 
    Validates the given 1-based page number. 
    """ 
    try: 
     number = int(number) 
    except (TypeError, ValueError): 
     raise PageNotAnInteger('That page number is not an integer') 
    if number < 1: 
     raise EmptyPage('That page number is less than 1') 
    if number > self.num_pages: 
     if number == 1 and self.allow_empty_first_page: 
      pass 
     else: 
      raise EmptyPage('That page contains no results') 
    return number 

按照您的條件:數將小於1,因此將提高

EmptyPage('That page number is less than 1')

但根據Django文檔,它應該已經提出了基本異常 InvalidPage

一邊寫文檔previous_page_number()

但按照InvalidPage解釋,EmptyPage例外談到下這只是這可能是一個錯字錯。所以它只是一個詳細/派生的InvalidPage異常。