По умолчанию для текущего месяца в MonthArchiveView

У меня есть MonthArchiveView для событий на моем сайте. Как я могу сделать архив по умолчанию текущим месяцем, вместо того, чтобы вызывать исключение, если не указан год и месяц (например, если пользователь посещает только /events/?

# urls.py
url(r'^events/$', EventMonthView.as_view(), name="event_month"),
url(r'^events/(?P<year>[0-9]{4})/(?P<month>[0-9]+)/$', EventMonthView.as_view(month_format='%m'), name="event_month"),

#views.py
class EventMonthView(MonthArchiveView):
    template_name = "events.html"
    queryset = Event.objects.all()
    date_field = "date"
    allow_future = True
    month_format='%m'
    year_format='%Y'

1 ответ

Решение

Вы можете переопределить get_month а также get_year методы, чтобы они возвращали значение по умолчанию:

from django.http import Http404
from django.utils.timezone import now
from django.views.generic import MonthArchiveView


class EventMonthView(MonthArchiveView):
    # ...

    def get_month(self):
        try:
            month = super(EventMonthView, self).get_month()
        except Http404:
            month = now().strftime(self.get_month_format())

        return month

    def get_year(self):
        try:
            year = super(EventMonthView, self).get_year()
        except Http404:
            year = now().strftime(self.get_year_format())

        return year
Другие вопросы по тегам