Model name of objects in django templates
object.__class__.__name__
or object._meta.object_name
should give you the name of the model class. However, this cannot be used in templates because the attribute names start with an underscore.
There isn't a built in way to get at that value from the templates, so you'll have to define a model method that returns that attribute, or for a more generic/reusable solution, use a template filter:
@register.filter
def to_class_name(value):
return value.__class__.__name__
which you can use in your template as:
{{ obj | to_class_name }}
Django added a publicly accessible API to model options called _meta, but you still can't access variables with an underscore in the template. Use a template filter:
@register.filter
def verbose_name(instance):
return instance._meta.verbose_name
In the template:
{{ instance|verbose_name }}
I even like to chain the title
filter to capitalize the words in the my template:
{{ instance|verbose_name|title }}
You cannot access the class name directly. Doing something like this:
{{ object.__class__ }}
will cause a TemplateSyntaxError: Variables and attributes may not begin with underscores
. Django doesn't let you access those sorts of attributes - Python conventions means they are hidden implementation details, not part of the object's API.
Create a template filter instead, and then you can use it as follows:
{{ object|model_name_filter }}
Creating filters is very easy: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/