1

我仍然不确定这是解决此问题的正确方法,也许不是,但无论如何我都会问。我想重写wordpress(理由:因为我可以)虽然我自己在Django中更简单,我希望能够在页面上以不同的方式配置元素。例如,我可能有:

  • 博客模型
  • 站点更新消息模型
  • 最新的评论模型。

现在,对于网站上的每个页面,我希望用户能够选择其顺序和任何项目。在我的思考过程中,这将是这样的:

class Page(models.Model)
    Slug = models.CharField(max_length=100)

class PageItem(models.Model)
    Page = models.ForeignKey(Page)
    ItemType = models.CharField(max_length=100) # tells me which model to display
    InstanceNum = models.IntegerField() # tells me which instance of which model...

然后,理想情况下,我的模板将遍历页面中的所有 PageItem,这很容易做到。

但是,如果我的页面项目是网站更新而不是博客文章怎么办?基本上,我想我想以不同的顺序拉回不同的项目类型并使用适当的模板显示它们。现在,我认为一种方法是在 inviews.py中循环所有对象并调用适当的视图函数,将一些 html 作为字符串返回,然后将其通过管道传输到生成的模板中。

我的问题是 - 这是做事的最佳方式吗?如果是这样,我该怎么做?如果不是,我应该走哪条路?我对 Django 很陌生,所以我还在学习它可以做什么和不能做什么,所以请多多包涵。我已经检查过 SO 是否有欺骗性,并且认为以前没有人问过这个问题......

我还查看了 Django-cms 是否有帮助,但我无法掌握它。

有什么建议么?

4

2 回答 2

2

首先,一些令人费解的元素。

 InstanceNum = models.IntegerField() # all models have primary keys.

在 Django 中,所有模型都分配有一个整数主键。

该评论没有意义,因为您不需要像这样添加主键。PageItem 已经有一个主键。

另外,请使用小写字母作为属性。类名只能使用大写。请。

“但是如果我的页面项目是网站更新而不是博客文章呢?基本上,我想我想以不同的顺序拉回不同的项目类型并使用适当的模板显示它们”

不同的类型通常意味着不同的型号。您可能希望将“站点更新”和“博客文章”作为单独的模型,而不是模糊的“PageItem”。

然后,您可以遍历这些不同的对象并将它们显示在模板中。

您可以使用返回 HTML 信息的方法轻松定义各种模型。您(通常)不想返回完全烘焙的 HTML。但 CSS ID 或类信息有时会有所帮助。

class SiteUpdate( models.Model ):
    page = models.ForeignKey(Page)
    item_text = models.CharField(max_length=100)
    item_css_class = models.CharField(max_length=64)

现在,您可以使用简单的方法将其生成到模板中,<div class="{{item.item_css_class}}">{{item.item_text}}</div>并使用 CSS 来处理区分站点更新与博客文章的格式细节。

于 2010-03-29T21:51:48.803 回答
1

模板标签可以接受一个包含要包含的include模板的变量,因此您可以遍历包含各种子模板的序列并依次包含它们,也许使用 dict 将友好名称映射到模板文件名。

于 2010-03-29T21:48:13.223 回答