使用 Django 多态模型生成 HTML

Posted

技术标签:

【中文标题】使用 Django 多态模型生成 HTML【英文标题】:Generate HTML using Django-Polymorphic models 【发布时间】:2016-10-07 23:02:22 【问题描述】:

我可以根据 DJANGO-POLYMORPHIC 模型动态生成 html 吗?我想从表中读取所有行并根据类类型生成 div。还是这是不好的做法?

% if content %
% for c in content %
<ul>
    %  if c.instance_of(Text) %
        <li>TEXT</li>
    % endif %
    %  if c.instance_of(Image) %
        <li>IMAGE</li>
    % endif %
</ul>
% endfor %
% else %
<p>No content available.</p>
% endif %

【问题讨论】:

【参考方案1】:

我不愿意这样编码。

首先,您需要在上下文中传递 TextImage,而不管 you can't call a function in a template with parameters.

我倾向于写一个模板标签或过滤器,或者更好,只是向类添加一个属性,返回它是“事物”的类型,您可以直接将其放入&lt;li&gt;&lt;/li&gt;

class Foo(PolymorphicModel):
    def description(self):
        return self.__class__.__name__

还有……

<ul>
% for c in content %
        <li>c.description</li>
% endfor %
</ul>

【讨论】:

你对 if 'TextContent' in c.description elif 'ImageContent' in c.description 有什么看法? 我有点想保持干燥,你的描述会被封装在课堂上的一个地方。然后你也可以在其他页面中使用它,并且不需要一遍又一遍地将类名翻译成一些很好的描述......description()甚至可以是每个子类的静态字符串,而不是self.__class__.__name__

以上是关于使用 Django 多态模型生成 HTML的主要内容,如果未能解决你的问题,请参考以下文章

django 模型-----定义模型

如何在客户端应用程序中使用 Django 模型进行验证和表单生成?

Django使用数据库表反向生成models类

django基础知识之定义模型:

使用 ORM 生成的实体作为多态的域对象

在 Python 中动态生成导入,专门针对 Django 模型