@StasShk

Как сделать правильную структуру сайта на WagtailCMS?

Добрый день!
Я делаю каталог статей, что то вроде urbaninfluence.com/work/. Есть главная страница, где представлен список категорий, есть страницы категорий со списком статей и есть сами стать. Сделать все это хочется на Wagtail, нравится их StreamField. Мне кажется, на его основе можно сделать удобный инструмент для редакторов.
Но я не могу понять, как должна выглядеть структура сайта, то есть то, что написано в models.py. Статьи у меня будут вагитэйловские Page с StreamField.
class ItemPage(Page):
     ........
    body = StreamField([
       ......

Но как сделать список категорий? Надо ли использовать для них базовые модели Django, или через модели страниц Wagtail-а?
В целом, кто-нибудь работал с этой CMS?
  • Вопрос задан
  • 671 просмотр
Пригласить эксперта
Ответы на вопрос 2
m1kola
@m1kola
Вы можете использовать страницы (наследоваться от 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.: ответ запоздал, но надеюсь он будет полезен тем у кого возникнет похожий вопрос.
Ответ написан
Комментировать
Если этот Вагтейл на основе джанго - нужно 3 модели.
Категория и ее атрибуты внутри.
Статья ее атрибуты и внешний ключ от Категории.
По-джанговски: список категорий - просто вьюха с Category.objects.all()
Список статей Article.objects.filter(categoryid=some_id)
Статья Article.objects.get(id=some_id)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы