从应用程序数据自动生成页面

Automatically generating pages from app data

我是 Django CMS 的新手,想知道执行以下操作的最佳方法是什么。我是 运行 一个 Django CMS 项目和一个自定义应用程序,该应用程序具有针对某些(虚拟)社交活动的 Event 模型。理想情况下,我希望 url ^events/<event_id>/ 映射到任何有效 Event id 值的适当事件页面。这些事件页面应该看起来类似于我的静态页面,特别是使用相同的静态占位符并且(理想情况下)从相同的基本模板文件继承。

实现此目标的最佳方法是什么?从文档中可以看出,插件或 apphook 允许我将应用程序数据附加到 Django CMS 页面,但使用这种方法我将不得不为每个事件手动创建一个 Django CMS 页面。有没有办法避免这种情况?

通常在 SO 上你会被要求展示你到目前为止的尝试,但今天是你的幸运日。

这里有一个存根,说明如何实现您所描述的目标。关于占位符,您可以在文档 here and here.

中找到更多信息

祝你好运!

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 页面,然后就可以开始了。