Как добавить параметры 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 нефиксированным способом с одновременной валидацией формы?