如何不可知地从另一个 Django 模型链接任何对象/模型?

2024-01-11

我正在编写一个基于 Django 的简单 CMS。大多数内容管理系统依赖于固定页面、固定 URL、使用具有一个或多个可编辑区域的模板。要拥有可编辑区域,您需要一个页面。为了让系统确定哪个页面,您需要 URL。

当您不再处理“页面”(FlatPages 页面或其他页面),而是处理来自另一个模型的实例时,问题就出现了。例如,如果我有一个产品模型,我可能希望创建一个包含多个可编辑区域的详细信息页面。

I could将这些区域构建到模型中,但就我而言,有多个模型,并且我想要显示的数据量存在很大差异。

因此,我想在模板级别构建 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 来标记任何东西,对吧?我试图理解它是如何工作的,但我在画空白。

所以,首先,我生气了吗?假设我没有,而且这看起来是一个相对理智的想法,我应该如何将对象+字符串链接到块/可编辑区域?

注意:将进行编辑在页面上因此让用户编辑区域没有真正的问题。我不必在管理员中做任何反向繁琐的操作。我最终的梦想是允许第三个参数来指定这是什么类型的内容区域(文本、图像、视频等)。如果您对此有任何意见,我很乐意阅读!


django-tagging 使用 Django 的内容类型 http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/框架。文档在解释它方面比我做得更好,但最简单的描述是“可以指向任何其他模型的通用外键”。

这可能是您正在寻找的东西,但从您的描述来看,听起来您也想做一些与其他一些现有项目非常相似的事情:

  • Django-Flatblocks http://pypi.python.org/pypi/django-flatblocks/0.3.1(“...作用类似于 django.contrib.flatpages,但适用于页面的某些部分;就像您希望与主要内容一起显示的可编辑帮助框。”)

  • Django 更好的块 http://bitbucket.org/hakanw/django-better-chunks/wiki/Home(“将其视为您可能想要插入模板并从管理界面进行管理的少量可重用内容的平面页面。”)

等等。如果这些相似,那么它们将为您提供一个良好的起点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何不可知地从另一个 Django 模型链接任何对象/模型? 的相关文章

随机推荐