我正在写一个基于Django的简单CMS。大多数内容管理系统依靠在固定URL上使用具有一个或多个可编辑区域的模板的固定页面。要拥有可编辑的区域,您需要一个页面。要让系统计算出哪个页面,您需要URL。如何从另一个Django模型中非法链接任何对象/模型?
问题出现在你不再处理“页面”(是那些FlatPages页面或其他)时,而是来自另一个模型的实例。例如,如果我有一个产品模型,我可能希望创建一个内部具有多个可编辑区域的详细信息页面。
我可能建立这些区域到模型中,但在我的情况下,有几个模型,并在我想显示多少数据有很大的方差。
因此,我想要在模板级构建CMS,并指定块(可编辑区域)基于“页面”实例或其使用的模型的内容。
我有这个想法,也许我可以放弃网页这样的自定义模板标签:
{% block unique_object "unique placeholder name" %}
这将查找基于两个参数中的一个例子通过了“块”:
<h1>{{ product_instance.name }}</h1>
{% block product_instance "detail: product short description" %}
{% block product_instance "detail: product video" %}
{% block product_instance "detail: product long description" %}
听起来很漂亮吧?那么我遇到的问题是如何为区域创建一个“键”,以便我可以将正确的区块拉出来?我将处理一个完全未知的对象(它可能是一个“页面”对象,一个URL,一个模型实例,任何东西 - 它甚至可能是一艘船</fg>
)。
其他Django微应用程序必须这样做。你可以用django-tagging标记任何东西,对吧?我试图理解这是如何工作,但我画空白。
所以,首先,我疯了吗?假设我没有,并且这看起来像一个相对理智的想法,我应该如何将一个对象+字符串链接到块/可编辑区域?
注意:编辑将完成页面因此,让用户编辑区域没有真正的问题。我不需要在管理员中做任何反向巨型超大型游戏。我最终的梦想是允许第三个参数指定这是什么类型的内容区域(文本,图像,视频等)。如果您对此有任何意见,我很乐意阅读它们!
打开赏金。我需要一个如何使用contenttypes对模型进行编码的示例,以及一个示例,向我展示如何使templatetag获取对象实例和字符串以定位模型。 – Oli 2009-07-29 14:15:12
我无法理解您的问题域。你能澄清一下:你正在使用的模型是什么,他们期望的关系是什么? – John 2009-08-02 04:46:25
这个问题的唯一核心是我的Block模型。但我需要能够使用字符串和通用对象实例混合来识别“Block”实例。例如,我可以将“Block”实例链接到CMS“Page”实例以及一个标题为“title”或“Product”实例和“title”,“footer”等的字符串。 – Oli 2009-08-02 14:59:43