Я новичок в Django CMS, и мне интересно, как лучше всего сделать следующее. Я запускаю проект Django CMS вместе с пользовательским приложением, которое имеет модель Event для некоторых (виртуальных) социальных событий. В идеале я хотел бы, чтобы URL-адрес ^events/<event_id>/ отображался на соответствующую страницу события для любого допустимого значения идентификатора Event. Эти страницы событий должны быть похожи на мои статические страницы, в частности, с использованием тех же статических заполнителей и (в идеале) наследованием от тех же файлов базовых шаблонов.

Как лучше всего этого добиться? Из документации следует, что плагин или перехватчики приложений позволят мне прикрепить данные приложения к странице Django CMS, но при таком подходе мне пришлось бы вручную создавать страницу Django CMS для каждого события. Есть ли способ этого избежать?

1
Paul Li 3 Дек 2020 в 05:09

1 ответ

Лучший ответ

Обычно на SO вас просят показать, что вы уже пробовали, но сегодня ваш счастливый день 🎅🏼.

Вот загвоздка о том, как вы могли бы достичь того, что описываете. Что касается заполнителей, вы можете найти дополнительную информацию в документации здесь и здесь.

Удачи!

models.py

class Event(models.Model):
    name = models.CharField(max_length=200)

views.py

from django.views.generic import ListView, DetailView

class EventListView(ListView):
    model = Event
    template_name = "events/listview.html"

class EventDetailView(ListView):
    model = Event
    template_name = "events/detailview.html"

apphook_urls.py

urlpatterns = [
    path('', EventListView.as_view(), name='event-list'),
    path('<int:pk>/', EventDetailView.as_view(), name='event-detail'),
]

cms_apps.py

from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool


class EventsAppHook(CMSApp):
    name = "Events"
    app_name = "events

    def get_urls(self, *args, **kwargs):
        return ["events.apphook_urls"]

apphook_pool.register(EventsAppHook)

Как только все будет запущено и запущено, вы прикрепите свой AppHook к странице cms по вашему выбору, и все будет в порядке.

1
creimers 18 Дек 2020 в 11:27