使用Django-Polymorphic模型生成HTML

问题描述:

我可以基于DJANGO-POLYMORPHIC模型动态生成HTML吗?我想读取表中的所有行并根据类的类型生成div。或者这是不好的做法?使用Django-Polymorphic模型生成HTML

{% 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 %} 

我不愿意这样编码。

首先,你需要通过TextImage在你的情况下,也不管you can't call a function in a template with parameters.

我倾向于要么编写模板标签和过滤器,或更好的,只是一个属性添加到类返回的“一事一议”的类型,你,你可以直接置于<li></li>

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

而且......

<ul> 
{% for c in content %} 
     <li>c.description</li> 
{% endfor %} 
</ul> 
+0

如果c.description中的'TextContent'elif'ImageContent'在c.description中有什么想法? – AK47

+0

我有点想保持干爽,你的描述将被封装在课堂上的一个地方。然后你可以在其他页面中使用它,并且不需要将类名翻译成一些好的描述...'description()'甚至可以是每个子类的静态字符串,而不是'self .__ class__。 __name__' – rrauenza