如何在Django模板中获取对象的类?

如何在Django模板中获取对象的类?,django,Django,如果我有一个需要类似布局但需要基于对象类设置某些属性的对象列表,那么当模板中没有class和其他xx值时,如何获取类名 {% for obj in objects %} <div class={{obj.__class__.__name__}} .. </div> {% endfor }} {对象%中obj的百分比} 一点肮脏的解决方案 如果对象是属于模型的查询集,则可以向模型添加自定义方法 class mymodel(models.Model): foo =

如果我有一个需要类似布局但需要基于对象类设置某些属性的对象列表,那么当模板中没有class和其他xx值时,如何获取类名

{% for obj in objects %} <div class={{obj.__class__.__name__}} .. </div> {% endfor }} {对象%中obj的百分比}
一点肮脏的解决方案

如果对象是属于模型的查询集,则可以向模型添加自定义方法

 class mymodel(models.Model):
     foo = models........


 def get_cname(self):
    class_name = ....
    return class_name 
然后,您可以在模板中尝试:

{% for obj in objects %}
   <div class="{{obj.get_cname}}">
     ..
  </div>
{% endfor }}
{%用于对象%中的obj}
..
{%endfor}}

您还可以编写自定义筛选器。我的任务是检查Django表单中的html元素是否是复选框。这段代码已经用Django 1.4进行了测试

我按照指示去做。我的过滤代码看起来就是这样

在myapp/templatetags/class_tag.py中:

from django import template
register = template.Library()
@register.filter(name='get_class')
def get_class(value):
  return value.__class__.__name__
在模板文件中:

{% load class_tag %}

{% if Object|get_class == 'AClassName' %}
 do something
{% endif %}


{{ Object|get_class }}

简单一点;假设布局是单个模型的列表:

class ObjectListView(ListView):
    model = Person
    template_name = 'object_list.html'

    def model_name(self):
        return self.model._meta.verbose_name
然后在
对象列表.html
中:

{% for obj in object_list %}
    <div class="{{view.model_name}}">...</div>
{% endfor }}
{对象列表%中的对象的%
...
{%endfor}}

如果您在几个类中需要自定义筛选器,David建议的自定义筛选器非常有用

Django文档忽略了dev服务器不会自动检测到新的TemplateTag,因此,在我手动重新启动它之前,我一直使用
TemplateSyntaxError类\u标记不是注册的标记库


.

这是一个更好的解决方案这是最类似于Django的解决方案;只是不要忘记在创建templatetag后重新启动服务器,否则会出现错误。