との闘いを続けてWeekArchiveView
、どうすれば週ごとにページ付けできますか?
私が欲しいのは:
- 来週/前週が利用可能かどうかを知るため。
- ある場合は、テンプレートにリンクを提供します。
空の週もスキップしてほしい。
ソースはget_next_day
/get_prev_day
とget_next_month
/get_prev_month
が利用可能であることを示していますが、何週間も何もありません。
との闘いを続けてWeekArchiveView
、どうすれば週ごとにページ付けできますか?
私が欲しいのは:
空の週もスキップしてほしい。
ソースはget_next_day
/get_prev_day
とget_next_month
/get_prev_month
が利用可能であることを示していますが、何週間も何もありません。
それは確かに興味深いです。確かに、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
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)
chrisdprattのコードをベースにして、テンプレートに と を提供するクラスを作成しまし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
これは完璧に機能します。