Как разбить на страницы WeekArchiveView? - PullRequest
3 голосов
/ 05 октября 2011

В продолжение моей борьбы с WeekArchiveView, как мне разбить ее на недели?

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

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

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

Источник показывает get_next_day / get_prev_day и get_next_month / get_prev_monthдоступно, но ничего неделями.

Ответы [ 2 ]

3 голосов
/ 06 октября 2011

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

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

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)
2 голосов
/ 06 октября 2011

Взяв код Крисдратта за основу, я создал класс, который предоставляет шаблон с 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

. Это прекрасно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...