python - 以字符串形式返回模板 - Django

标签 python django django-models django-templates django-views

我仍然不确定这是正确的方法,也许不是,但无论如何我都会问。我想重写 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/

相关文章:

python - 在 Django 中,如何从单个表单字段填充通用关系?

python - SQLAlchemy 通过父连接查询子表过滤器

python - 如何正确指定参数以在 Django admin 中显示方法的输出?

django - 无法启动 gunicorn.service : Unit gunicorn. 找不到服务

django - 在 Django Admin 的搜索字段中显示函数的名称

django:manytomanyfield with through 如何出现在管理员中?

java - Java中的@override和Python中的@decorator的区别

python - TypeError : write() argument must be str, 不是字节,升级到 python 3

python - 如何在 Python 中使用正则表达式和 re.sub 查找所有出现的 unicode 字符的大写和小写字母?

python - Django MultiWidget 电话号码字段