Я думаю, что вы ищете страницу со списком блогов, где вы можете перечислить все свои записи в блоге, а затем размещать записи в блогах на основе определенной категории.
Возможно, вы захотите использовать RoutablePageMixin (если вы не создаете SPA с Vue или React). RoutablePageMixin позволяет автоматически создавать дополнительные дочерние страницы без необходимости создавать дочерние страницы Wagtail.
from wagtail.contrib.routable_page.models import RoutablePageMixin, route
class BlogListingPage(RoutablePageMixin, Page):
"""BlogListingPage class."""
template = 'cms/blog/blog_listing_page.html'
subpage_types = ['pages.BlogPage']
# ... other fields here
@route(r'^category/(?P<cat_slug>[-\w]*)/$', name='category_list')
def category_list(self, request, cat_slug):
"""Return posts in a certain category."""
context = self.get_context(request)
posts = BlogPage.objects.live().filter(categories__slug=cat_slug).order_by('-pub_date')
context['posts'] = posts
return render(request, 'cms/blog/blog_category_page.html', context)
Примечание Я не протестировал этот код, возможно, вам придется исправить все ошибки и настроить его в соответствии с вашими потребностями.
Приведенный выше код займет страницу со списком вашего блога (скажем, localhost: 8000 / blog /) и создаст страницу со списком категорий (т.е. localhost: 8000 / blog / category / topic-slug /)
То, что topic-slug
будет передано в метод category_list()
, где вы можете затем отфильтровать свой BlogPage по категории (категориям), в которой он находится. Он добавит posts
на вашу страницу и отобразит другую страницу со списком. где вы можете настроить свой шаблон.
Прошло много времени с тех пор, как я проверил, но демоверсия Wagtail Bakery , вероятно, содержит примеры этого (и много действительно сладких вкусностей).
Подробнее о маршрутизируемых страницах трясогузки можно узнать по https://docs.wagtail.io/en/latest/reference/contrib/routablepage.html.