3

Dans la suite de my struggle avec WeekArchiveView, comment puis-je le paginer par semaine?Comment paginer WeekArchiveView?

Tout ce que je veux est:

  • de savoir s'il est à côté/semaine précédente disponible;
  • dans le cas où il existe, fournir un lien dans le modèle.

J'aimerais aussi éviter les semaines vides.

The source montre get_next_day/get_prev_day et get_next_month/get_prev_month sont disponibles, mais rien pendant des semaines.

Répondre

3

C'est vraiment intéressant. Evidemment, MonthMixin comprend les méthodes get_next_month/get_prev_month, et DayMixin inclut les méthodes get_next_day/get_prev_day. Toutefois, YearMixin et WeekMixin n'ont aucun équivalent fonctionnel dans leurs définitions. Cela semble être un peu un oubli de la part de l'équipe Django.

Je pense que votre meilleur pari est de sous-classe soit WeekArchiveView ou BaseWeekArchiveView (si vous pouvez éventuellement modifier le format de réponse et ne veulent pas avoir à ré-implémenter vos méthodes) et ajouter vos propres get_next_week/get_prev_week méthodes . Ensuite, votre vue héritera de votre sous-classe à la place. Une simple modification des méthodes DayMixin devrait suffire.

def get_next_week(self, date): 
    """ 
    Get the next valid week. 
    """ 
    next = date + datetime.timedelta(days=7) 
    return _get_next_prev_month(self, next, is_previous=False, use_first_day=False) 

def get_previous_week(self, date): 
    """ 
    Get the previous valid week. 
    """ 
    prev = date - datetime.timedelta(days=7) 
    return _get_next_prev_month(self, prev, is_previous=True, use_first_day=False) 
+0

Cela m'a vraiment aidé! Merci. –

+0

Pouvez-vous s'il vous plaît m'aider [comprendre le reste] (http://stackoverflow.com/questions/7665013/how-do-i-paginate-weekarchiveview/7667867#7667867)? Nous sommes presque là, je cherche juste une façon propre de rendre 'previous_week' être' None' quand il n'y a pas d'éléments avant la semaine donnée. –

+0

Oups! C'était ma faute. J'ai mis 'allow_empty' à' True', c'est pourquoi j'ai récupéré ces pages vides. Merci encore énorme! –

2

Prendre chrisdpratt's code comme base, je crée une classe qui fournit le modèle avec next_week et previous_week:

class BetterWeekArchiveView(WeekArchiveView): 

    def get_next_week(self, date): 
     """ 
     Get the next valid week. 
     """ 
     next = date + timedelta(days=7) 
     return _get_next_prev_month(self, next, is_previous=False, use_first_day=False) 

    def get_previous_week(self, date): 
     """ 
     Get the previous valid week. 
     """ 
     prev = date - timedelta(days=7) 
     return _get_next_prev_month(self, prev, is_previous=True, use_first_day=False) 

    def get_dated_items(self): 
     """ 
     Return (date_list, items, extra_context) for this request. 
     Inject next_week and previous_week into extra_context. 
     """ 
     result = super(BetterWeekArchiveView, self).get_dated_items() 
     extra_context = result[2] 
     date = extra_context['week'] 

     extra_context.update({ 
      'next_week': self.get_next_week(date), 
      'previous_week': self.get_previous_week(date), 
     }) 

     return result 

Cela fonctionne parfaitement.