我仍然不确定这是正确的方法,也许不是,但无论如何我都会问。我想重写 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,这很容易做到。
但是,如果我的页面项目是网站更新而不是博客文章怎么办?基本上,我想我想以不同的顺序拉回不同的项目类型,并使用适当的模板显示它们。现在,我认为一种方法是在views.py中循环遍历所有对象并调用适当的 View 函数,返回一些html作为字符串,然后通过管道将其添加到生成的模板中。
我的问题是 - 这是做事的最佳方式吗?如果是这样,我该怎么做?如果不是,我应该走哪条路?我对 Django 还很陌生,所以我仍在学习它能做什么和不能做什么,所以请耐心等待。我已经检查过是否有欺骗行为,并且认为以前没有人问过这个问题...
我还查看了 Django-cms,看看这是否有帮助,但我无法掌握它。
有什么建议吗?
最佳答案
首先,一些谜题。
InstanceNum = models.IntegerField() # all models have primary keys.
在 Django 中,所有模型都分配有一个整数主键。
该注释没有意义,因为您不需要像这样添加主键。 PageItem 已经有主键。
此外,属性请使用小写字母。类名仅使用大写。请。
"But what if my page item is a site update as opposed to a blog post? Basically, I am thinking I'd like to pull different item types back in different orders and display them using the appropriate templates"
不同的类型通常意味着不同的型号。您可能希望将“站点更新”和“博客文章”作为单独的模型,而不是模糊的“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 处理区分网站更新和博客文章的格式细节。
关于python - 以字符串形式返回模板 - Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2541485/