3

В продолжение my struggle с WeekArchiveView, как его разбивать на страницы по неделям?Как рисовать WeekArchiveView?

Все, что я хочу это:

  • знать, если есть следующая/предыдущая неделя доступны;
  • в случае, если есть ссылка, укажите ссылку в шаблоне.

Хотелось бы также пропустить пустые недели.

The source показывает get_next_day/get_prev_day и get_next_month/get_prev_month доступны, но ничего в течение нескольких недель.

ответ

3

Это определенно интересно. Уверен, что MonthMixin включает в себя методы get_next_month/get_prev_month и DayMixin содержит get_next_day/get_prev_day методы. Однако, как YearMixin, так и WeekMixin не имеют функционального эквивалента в своих определениях. Кажется, это немного надзор над частью команды Django.

Я думаю, что вам лучше всего подкласс либо WeekArchiveView или BaseWeekArchiveView (если вы, возможно, в конце концов, нужны изменить на формат ответ и не хотите, чтобы повторно реализовать свои методы) и добавить свои собственные get_next_week/get_prev_week методов , Затем вместо этого нарисуйте свой вид из своего подкласса. Должна быть достаточно простая модификация методов DayMixin.

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

Это действительно помогло мне! Благодарю. –

+0

Можете ли вы, пожалуйста, помочь мне [выяснить остальные] (http://stackoverflow.com/questions/7665013/how-do-i-paginate-weekarchiveview/7667867#7667867)? Мы почти там, я просто ищу чистый способ сделать 'previous_week'' '' 'Нет, если перед этой неделей нет предметов. –

+0

Упс! Это была моя ошибка. Я устанавливаю 'allow_empty'' True', поэтому я получил эти пустые страницы. Спасибо огромное снова! –

2

chrisdpratt's code Принимая в качестве основы, я создал класс, который предоставляет шаблон с next_week и 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 

Это работает идеально.