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

17 django

如果我有一个需要类似布局但需要根据对象类设置一些属性的对象列表,我怎样才能获取类名,而和其他xx值在模板中不可用.

{% for obj in objects %}
 <div class={{obj.__class__.__name__}}
   ..
 </div>
{% endfor }}

可能有一种替代方法,我在这里失踪..

dav*_*gsu 32

您还可以编写自定义过滤器.我的用例是检查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__
Run Code Online (Sandbox Code Playgroud)

在您的模板文件中:

{% load class_tag %}

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


{{ Object|get_class }}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个更好的解决方案 (2认同)

And*_*sio 14

有点脏的解决方案

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

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


 def get_cname(self):
    class_name = ....
    return class_name 
Run Code Online (Sandbox Code Playgroud)

然后在您的模板中,您可以尝试:

{% for obj in objects %}
   <div class="{{obj.get_cname}}">
     ..
  </div>
{% endfor }}
Run Code Online (Sandbox Code Playgroud)