我仍然不确定这是解决这个问题的正确方法,也许不是,但无论如何我都会问。我想重写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...
然后,理想情况下,我的模板将遍历页面中的所有PageItems,这很容易做到。
但是如果我的页面项目是网站更新而不是博客帖子怎么办?基本上,我想我想以不同的顺序拉回不同的项目类型,并使用适当的模板显示它们。现在,我认为一种方法是在views.py
中循环遍历所有对象并调用相应的视图函数,将一些html作为字符串返回,然后将其输入到生成的模板中
我的问题是 - 这是最好的做事方式吗?如果是这样,我该怎么办?如果没有,我应该走哪条路?我对Django很新,所以我还在学习它能做什么,不能做什么,所以请耐心等待。我已经检查了SO的傻瓜,并且不认为之前曾经问过这个......
我也看过Django-cms,看看是否有帮助,但我无法掌握它。
有什么建议吗?
答案 0 :(得分:2)
首先,一些puzzelement。
InstanceNum = models.IntegerField() # all models have primary keys.
在Django中,所有模型都分配了一个整数主键。
评论没有意义,因为您不需要像这样添加主键。 PageItem已经有了一个主键。
另外,请使用小写字母作为属性。仅对类名使用大写。请。
“但是,如果我的页面项目是网站更新而不是博客帖子怎么办?基本上,我想我想要 拉回不同的项目类型 不同的订单并显示它们 使用适当的模板“
不同的类型通常意味着不同的模型。您可能希望将“网站更新”和“博客帖子”作为单独的模型,而不是模糊的“PageItem”。
然后,您可以遍历这些不同的对象并将其显示在模板中。
您可以轻松地使用方法定义各种模型以返回HTML信息。您(通常)不希望返回完全烘焙的HTML。但CSS ID或Class信息有时会有所帮助。
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来处理区分网站更新而不是博客文章的格式详细信息。
答案 1 :(得分:1)
include
模板标记可以包含一个包含要包含的模板的变量,因此您可以遍历包含各种子模板的序列并依次包含它们,也许使用dict将友好名称映射到模板文件名。