Как добавить параметры URL на страницу архива Wagtail с формой фильтра?

Речь идет о странице архива в Wagtail CMS, где большое количество постов может быть отфильтровано по определенным свойствам. Фильтрация осуществляется с помощью формы с несколькими элементами select. Форма проверяется в методе serve() страницы. Набор запросов фильтруется там же. Вот примерный код, иллюстрирующий то, что я имею в виду:

from .forms import ArchivePageFilterForm
...


class ArchivePage(Page):
    ...

    def pages(self):
        return SomeModel.objects.live()  # exemplary queryset

    def serve(self, request):
        filter_form = ArchivePageFilterForm(request.POST or None)

        if request.method == "POST":
            if filter_form.is_valid():
                name = filter_form.cleaned_data["name"]
                category = filter_form.cleaned_data["category"]
                color = filter_form.cleaned_data["color"]
                whatever = filter_form.cleaned_data["whatever"]

                selected_pages = filter_query(
                    self.pages, name, category, color, whatever
                )  # imagine some filtering magic here
                
                return render(request, "pages/archive_page.html", {
                    "page": self,
                    "pages": selected_pages,
                    "form": ArchivePageFilterForm(initial={
                        "name": name,
                        "category": category,
                        "color": color,
                        "whatever": whatever,
                    }),
                })

        # fallback
        return render(request, "pages/archive_page.html", {
            "page": self,
            "pages": self.pages,
            "form": ArchivePageFilterForm(),
        })

Здесь RoutablePageMixin мне не подошел, потому что он работает только с фиксированными схемами URL. Мне интересно, как я могу добавлять параметры URL только по мере необходимости, по одному, в зависимости от активных фильтров. Примерные URL, которые были бы возможны для одной и той же страницы:

  • .../archive/?name=janedoe
  • .../archive/?name=janedoe&category=essay
  • .../archive/?category=essay
  • .../archive/?category=essay&color=green&whatever=foobar

... Вы поняли идею. Основная концепция параметров URL. Как я могу добавить их в Wagtail через метод render? Или как заставить их работать с RoutablePageMixin нефиксированным способом с одновременной валидацией формы?

Вернуться на верх