Вы можете использовать страницы (наследоваться от Page) для главной страницы, для страницы категории и для страницы статьи.
Т.е. вам нужны три модели:
- class HomePage(Page)
- class CategoryPage(Page)
- class ArticlePage(Page)
Wagtail использует древовидную структуру для страниц. Т.е. дерево страниц будет примерно таким:
- Root
-- Home (HomePage)
---- Category 1 (CategoryPage)
----- Article 1 (ArticlePage)
----- Article 2 (ArticlePage)
---- Category 2 (CategoryPage)
----- Article 3 (ArticlePage)
Вы можете
ограничить для каждого типа страницы какие страницы могут использоваться как дочерние (subpage_types) и какие типы страниц могут использоваться как родительские (parent_page_types).
Вот пример:
class HomePage(Page):
# Ваши поля, если нужно
# Тут не ограничиваем дочерние и родительские страницы
# т.к. на сайте могут быть не только 3 типа страниц
class CategoryPage(Page):
# Ваши поля, если нужно
# Может быть создана только как дочерняя страница для HomePage
parent_page_types = ['your_django_app_name.HomePage']
# Дочерними страницами могут быть только CategoryPage.
subpage_types = ['your_django_app_name.CategoryPage']
class ArticlePage(Page):
# Ваши поля. StreamField, или что угодно
# Может быть создана только как дочерняя страница для CategoryPage
parent_page_types = ['your_django_app_name.CategoryPage']
# Дочерних страниц у этой страницы быть не может
subpage_types = []
Есть другие варианты реализации - выбор зависит от ваших требований. Вы можете использовать
сниппеты или
теги в качестве категорий.
P.S.: ответ запоздал, но надеюсь он будет полезен тем у кого возникнет похожий вопрос.