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

Posted

技术标签:

【中文标题】django:CMS 的递归/树状 URL 映射?【英文标题】:django: recursive/tree-like URL mapping for a CMS? 【发布时间】:2011-07-04 10:02:41 【问题描述】:

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

我想让每条内容都继承自一个基础内容对象(多表继承)。这意味着所有内容都可以轻松查询,整洁且可扩展(无需重新编写所有基本内容,如“created_by”、“title”、“slug”等)

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

相当直接。

在组织方面,各种内容对象/模型应该可以选择分配到一个部分(即播客对象属于“音乐”)。或者,一个部分应该能够将自己分配给一个父部分('Words > Blog > General >')。在 CMS 中,这又是一个非常标准的想法。

理想情况下,我希望为这样的组织提供一个完全通用的解决方案(就像我对内容有一个通用的解决方案一样)。我正在考虑一个树状结构,其中每个节点要么是一个部分,要么是一个内容对象模型。

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

    > contentobj4

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

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

基本上我想编写一个结构/骨架,其中内容和组织是分开的,而 url/模板方案与实际内容完全分开。以前我应该有一个博客应用程序、一个活动应用程序,但我肯定应该有一个内容应用程序来管理网站的所有内容,也许还有一个组织应用程序来管理各个部分等。

【问题讨论】:

【参考方案1】:

我喜欢这个问题。自从离开 plone-land 后,我就一直在脑后渗出这种感觉(并不是说我仍然不时不时回到那里)。

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

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

【讨论】:

是的,以硬编码的方式组装了一个 CMS,我试图确定这个想法。经过深思熟虑,我认为分层的东西应该很容易。我要去看看管理员的东西。是递归 URL 让我着迷【参考方案2】:

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

顺便说一句,你为什么不看看django-cms。它是一款非常灵活的应用程序,并且有很多扩展点可用于集成您自己的应用程序。

【讨论】:

我从没看过 mptt,但是一读到这里就立刻想到了 treebeard... 我没有机会使用 treebeard,因为我两次使用树 mptt 已经在项目中实现了。 他们看起来都会为树状结构(即部分)做生意

以上是关于django:CMS 的递归/树状 URL 映射?的主要内容,如果未能解决你的问题,请参考以下文章

Django装饰器--@permalink

django-cms:反向 url 到一个/另一个 apphook - 多语言

django-cms url 与 Slug at Root

为啥 django page cms get_absolute_url 返回一个空字符串?

Django CMS如何为同一个apphook的2个实例使用不同的url

检查 Django CMS 中是不是存在页面