3

との闘いを続けてWeekArchiveView、どうすれば週ごとにページ付けできますか?

私が欲しいのは:

  • 来週/前週が利用可能かどうかを知るため。
  • ある場合は、テンプレートにリンクを提供します。

空の週もスキップしてほしい。

ソースget_next_day/get_prev_dayget_next_month/get_prev_monthが利用可能であることを示していますが、何週間も何もありません。

4

2 に答える 2

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メソッドを追加することだと思います。次に、代わりにビューをサブクラスから継承させます。DayMixins メソッドの単純な変更で十分です。

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)
于 2011-10-05T20:09:48.893 に答える
2

chrisdprattのコードをベースにして、テンプレートに と を提供するクラスを作成しましnext_weekprevious_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

これは完璧に機能します。

于 2011-10-05T21:19:25.730 に答える