Представление Wagtail с параметрами URL или несколькими пользовательскими URL
У меня есть календарь, который используется в общем приложении Django, но я также хочу показывать его в приложении Wagtail (которое показывает общий текстовый контент/блог) для этого сайта.
Я дошел до того, что могу отображать календарь на странице Wagtail, с некоторым ручным вводом параметров даты. Модель для этого выглядит следующим образом:
class SchedulePage(PostPageExtras, RoutablePageMixin, Page):
content_panels = Page.content_panels
def get_context(self, request, *args, **kwargs):
context = super().get_context(request, *args, **kwargs)
context['schedule'] = self.get_calendar()
return context
def get_calendar(self):
the_year = 2024
the_month = 7
cal = ScheduleCalendar().formatmonth(the_year, the_month, withyear=True)
return cal
Я пытался решить эту проблему с помощью RoutablePageMixin
, но не достиг никакого прогресса. Я могу генерировать значения the_year
и the_month
, вытекающие из .now()
, поэтому календарь всегда показывает текущий месяц. Но я хочу, чтобы пользователь мог переходить к следующему/предыдущему месяцу.
В приложении Django это реализовано так: есть два урла, которые указывают на одно и то же представление, и представление интерпретирует параметры так, как нужно:
path('/schedule/', views.ScheduleCalendarView.as_view(), name='control-schedule-calendar'),
re_path(r'^/schedule/(?P<year>\d+)/(?P<month>\d+)/$', views.ScheduleCalendarView.as_view(), name='control-schedule-monthview'),
При использовании этих двух URL-адресов вы получите одинаковое отображение страницы (на июль 2024 года):
https://example.com/schedule/
https://examle.com/schedule/2024/07/
Потому что в первом примере представление создает параметры the_year
/the_month
, если они не присутствуют в URL.
Есть и третий URL, с другим видом, который показывает детализацию за определенный день:
re_path(r'^/schedule/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/$', views.ControlScheduleDayView.as_view(), name='control-schedule-dayview'),
Все это довольно просто в обычном Django.
Полагаю, что я хотел бы следовать той же схеме, или трем URL, и, возможно, не нуждаться во втором представлении для дневного представления, был бы какой-то переключатель, если бы параметр day
был в URL.
Как сделать это в модели Wagtail? Или как сделать это в общем окружении Django, загрузив шаблоны Wagtail/blog и показав навигацию Wagtail/blog?
Заранее спасибо.
Мы делаем это - фактически это наша вторая итерация по одному и тому же шаблону. Проще было извлечь код в gist: https://gist.github.com/cnk/603c48f6029e033d38e006db6988843a