2017-04-06 4 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 
>>> 

Selon la documentation previous_page_number().Exception inattendue déclenchée par la méthode previous_page_number() - Django Paginator

Page.previous_page_number()

Renvoie le précédent numéro de la page. Lève InvalidPage si la page précédente n'existe pas.

Je m'attendais à previous_page_number() pour déclencher l'exception InvalidPage comme le dit la documentation. Pourquoi le retour EmptyPage exception?

Est-ce que je manque quelque chose?

+0

Quelle version django utilisez-vous? –

+0

J'utilise django 1.10 – Cody

+0

Mais l'exception invalide est-elle vraiment importante? Vous pouvez utiliser has_previous à la place de previous_page_number pour vérifier la page précédente? –

Répondre

0

Selon la source paginator (de 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 

Selon votre condition: nombre sera inférieur à 1 il soulèvera

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

Mais selon Django docs il devrait avoir augmenté l'exception de base InvalidPage!

Cela pourrait être une erreur faute de frappe en écrivant la documentation previous_page_number()

Mais selon InvalidPage explication, EmptyPage exception relève de ce que. Donc c'est rien sauf une exception détaillée/dérivée de InvalidPage.