使用Django构建通用块状CMS

1 投票
2 回答
1235 浏览
提问于 2025-04-17 07:41

最近,一个设计师给我提供了一个网站的设计图,我正在为一个客户搭建这个网站。设计图很不错,但我真不知道该怎么把它实现到网站上。

内容可以很容易地分成一个个小块,比如我可以为文本输入分配一个文本框,为链接按钮分配几个字符字段等等,然后按顺序把它们展示到页面上。

问题是(也就是我为什么不直接用Django-CMS之类的工具)这些小块之间的样式和功能差别很大。我可能需要为每种小块类型建立大约20个不同的模型。与其去修改一个现成的CMS,我想建立一个页面模型,然后通过一个多对多的关系,链接到我抽象块类的有序子类列表。希望我没有让你听得一头雾水。

我不太明白该怎么做。以下问题浮现在我的脑海中:

  • 有没有简单的CMS已经能做到这些?我是不是在浪费时间研究这些东西?

  • 我的块子类技术上会是不同的类型。我需要用到通用类来链接它们吗?如果需要,我该怎么做?

  • 我怎么在内联管理界面中渲染不同的表单?(我想在页面表单下方列出这些块)

  • 用户怎么在内联控制中指定块的类型?


补充:或者说,基于模板标签的CMS怎么样?

我在想可以在我的模板中放入这样的代码:

{% editable 'unique_id' 'content-type' %}

再举个例子:

{% editable 'home-intro' 'text' %}

这样我就可以把这些代码放在我想要可编辑的模板周围,按照我希望的方式进行编辑。当客户登录时,他们会看到“编辑文本”、“编辑链接”、“编辑图片”的链接,点击后就会弹出相应的输入框。

这样做会让事情更有条理,但布局需要保持稳定(而且客户对HTML/CSS一无所知),所以我认为这两种方法只能选其一。

2 个回答

0

你能不能把你的“区块”做成Django CMS的插件呢?这样每个页面就可以由多个插件组成。

每个插件都有一个管理表单,用来获取它自己的具体信息,然后页面模板就可以按照你想要的方式来显示这个插件。

如果你看看django-cms演示的第一页:

https://www.django-cms.org/en/tour-demo/

你会看到(1)有一个高亮的插件区块——在这个例子中是一个可以用TinyMCE或类似工具编辑的格式化文本区块。你可以定义自己的插件,并把它们添加到页面中。

0

上个月我发布了一篇文章(供审核)讲解如何为Jinja构建一个基本的内容管理系统(CMS)。这个模板语言和我之前使用的Django差别不大。你可以在这里找到这篇文章。它使用了模板继承的方式来填充内容块。https://codereview.stackexchange.com/questions/5965/review-request-jinja-cms-for-energiekantoor-nl-on-google-app-engine或者在谷歌上搜索:Jinja CMS

撰写回答