How to get the model name of an object in template?

4,806 views
Skip to first unread message

David.D

unread,
Aug 4, 2010, 10:20:06 AM8/4/10
to Django users
I did it by adding this to my models:
def get_model_name(self):
return self.__class__.__name__

And it works....

But I don't want to define the 'get_model_name' method in my model.

Is there a built-in way?

Thanks.

Scott Gould

unread,
Aug 4, 2010, 10:37:25 AM8/4/10
to Django users
How about writing a simple template tag that takes an object and
returns object.__class__.__name__?

David.D

unread,
Aug 4, 2010, 11:13:49 AM8/4/10
to Django users
There's no django's built-in way?

Scott Gould

unread,
Aug 4, 2010, 11:53:24 AM8/4/10
to Django users
Not that I'm aware of, in which case I'd say a tag (or even a filter)
*is* the "built-in way". No great hardship:

@register.filter
def class_name(value):
return value.__class__.__name__

David.D

unread,
Aug 4, 2010, 2:27:19 PM8/4/10
to Django users
I just wonder if there's some way requires writing nothing. Just like
an attribute.

thanks.

v0idnull

unread,
Aug 4, 2010, 2:52:45 PM8/4/10
to django...@googlegroups.com
i know this isn't what you want, but I'd use the Content Type
middleware.

def getType(self):
if (self._type == None):
self._type = ContentType.objects.get_for_model(self)
return self._type

for me personally this worked out well, but mostly because I have an
abstract model that all my other models extend, so I had to define that
method, once....

Daniel Roseman

unread,
Aug 5, 2010, 3:52:38 AM8/5/10
to Django users
On Aug 4, 7:27 pm, "David.D" <dengyuanzh...@gmail.com> wrote:
> I just wonder if there's some way requires writing nothing. Just like
> an attribute.
>
> thanks.

Yes, there is. Each model and model instance object has a _meta
attribute, which contains information about the model -
the .app_label, object_name and .verbose_name will probably be useful
to you.
--
DR.

Paulo Almeida

unread,
Aug 5, 2010, 7:15:48 AM8/5/10
to django...@googlegroups.com
But _meta starts with an underscore, so you can't use it in the template, right? I'm still using Django 1.0.2, so I don't know if that has changed along the way.

- Paulo


--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django...@googlegroups.com.
To unsubscribe from this group, send email to django-users...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.


David.D

unread,
Aug 5, 2010, 10:08:25 AM8/5/10
to Django users
TemplateSyntaxError at /products/Product/263/
Variables and attributes may not begin with underscores:
'object._meta'

Request Method: GET
Request URL: http://127.0.0.1:8000/products/Product/263/
Django Version: 1.3 pre-alpha
Exception Type: TemplateSyntaxError
Exception Value:
Variables and attributes may not begin with underscores:
'object._meta'
...
> > django-users...@googlegroups.com<django-users%2Bunsubscribe@google groups.com>
> > .
Reply all
Reply to author
Forward
0 new messages