Django中CMS(在线杂志)的灵活模型
我打算重新设计一本在普隆制作的在线杂志。 我打算在Django做这件事。(原因很简单,我喜欢Django,而且我必须免费维护这个特定的网站。) 然而,我不确定我应该如何设计模型。 基本上,我们的想法是建立一个站点结构——在Plone中,它映射到几个包含内容对象的文件夹 这是一个非常简单的布局-省略了所有不相关的(?)细节Django中CMS(在线杂志)的灵活模型,django,content-management-system,Django,Content Management System,我打算重新设计一本在普隆制作的在线杂志。 我打算在Django做这件事。(原因很简单,我喜欢Django,而且我必须免费维护这个特定的网站。) 然而,我不确定我应该如何设计模型。 基本上,我们的想法是建立一个站点结构——在Plone中,它映射到几个包含内容对象的文件夹 这是一个非常简单的布局-省略了所有不相关的(?)细节 class Category(models.Model): parent = models.ForeignKey('self') # stuff like de
class Category(models.Model):
parent = models.ForeignKey('self')
# stuff like description, slug etc.
class Article(models.Model):
category = models.ForeignKey(Catgegory)
# teaser stuff
问题是:
我如何扩展、更改或破坏此布局,以使此应用程序的用户能够添加类似于自定义文章的项目,这些项目仍然可以由类别视图中的列表项目来处理
相关-这有助于解决问题:
已经解决了这个问题。但是也有一些不同。这里有一种方法:
class Category(models.Model):
parent = models.ForeignKey('self')
# stuff like description, slug etc.
class Entry(models.Model):
category = models.ForeignKey(Catgegory)
view_method = models.IntegerField(choices = settings.CMS_VIEW_METHODS)
# teaser stuff
在应用程序文章中:
class Article(models.Model):
category = models.OneToOneField(cms.models.Entry)
您可以简单地使用duck类型-创建与文章具有相同属性的模型(或者至少是
列出\u category
中的\u items\u及其模板所使用的属性)。这些模型只需要具有类别的外键,并且您必须以某种方式配置列出类别中的项目来查找类别的相关属性。e、 g:
def list_items_in_category(request):
l = []
for attr in getattr(settings, 'ITEMS_ON_CATEGORY', ['article_set']):
l.extend(getattr(Category, attr).all())
# do something with 'l' in a template.
如果您不想以这种方式限制自定义模型的实际属性,您可以创建包装器类,使它们看起来像文章。您只需指定文章的“接口”即可查看该视图。顺便说一句,如果您想在Django中制作CMS,您可能需要查看。oops。在我的调查中,我怎么会错过那个?谢谢