django:CMS的递归/树状URL映射?

时间:2011-02-25 16:06:13

标签: django django-models django-templates django-urls

我正在重建一个网站,其中包含大量由用户贡献的内容(帖子,图片,活动等)。这个内容属于部分(音乐,商店等);即正常的CMS。

我希望每个内容都继承自基本内容对象(多表继承)。这意味着可以轻松查询所有内容,并且整洁且可扩展(无需重写所有基本内容,如'created_by','title','slug'等。)

ContentObj
    > Blog Post obj
    > Event Post obj
    > Podcast Post obj
    > ... etc.

相当直接。

在组织方面,各种内容objs / models应该可以选择分配给一个部分(即播客对象属于'Music')。或者,一个部分应该能够将自己分配给父部分('Words> Blog> General>')。再次,这是CMS中一个非常标准的标准。

理想情况下,我想要像这样的组织完全通用的解决方案(就像我有一个通用的内容解决方案)。我在想一个树状结构,其中每个节点都是一个section或contentobject模型。

root
    > section1
        > subsection 1 > contentobj1
        > subsection 2 > contentobj2
    > section2
        > contentobj3

    > contentobj4

这种通用设置的目标是拥有一个非常DRY-esqe的URL方案和模板系统。您只需要两个或三个模板。您根据用户请求的网址填充页面,并且永远不需要对/ blog ///等网址进行硬编码。

我无法理解如何在数据库驱动的应用程序中编写这种树状结构。拥有一个可以分配内容模型的模型部分会很容易。但是当谈到小节时,它有点棘手。此外,如何抽象URL方案,以便一个部分可以有多个子部分指向一个内容对象而不实际硬编码网址?

基本上我想写一个结构/骨架,其中内容和组织是分开的,url / template方案与实际内容完全分开。以前我会有一个博客应用程序,一个事件应用程序,但我肯定应该有一个管理网站所有内容的内容应用程序,也可能是一个管理这些部分等的组织应用程序。

2 个答案:

答案 0 :(得分:4)

要在模型中实现树,请检查trees and graphs section on django packages。我已经使用过并会推荐django-mptt

旁注,为什么不看看django-cms。它是一个非常灵活的优秀应用程序,并且有很多扩展点可用于集成您自己的应用程序。

答案 1 :(得分:1)

我喜欢这个问题。这是我在离开plone-land之后在我脑后渗透的东西(不是我不时还没回去)。

我肯定从一些树应用程序(如zsquare建议)开始,并构建一个基本模型,该模型利用通用外键链接您所谈论的各种内容类型 - 事件,文章,类别等< / p>

从那里开始,我会深入了解管理员,了解它如何处理动态网址生成并从那里开始,利用树包提供的功能来构建我的内容树的网址。