Название модели объектов в шаблонах Django - PullRequest
34 голосов
/ 04 июля 2011

Есть ли способ получить название модели любых объектов в шаблонах django.Вручную мы можем попробовать это, определив методы в моделях или используя теги шаблонов ... Но есть ли какой-нибудь встроенный способ?

Ответы [ 3 ]

54 голосов
/ 04 июля 2011

object.__class__.__name__ или object._meta.object_name должны дать вам название класса модели. Однако это нельзя использовать в шаблонах , поскольку имена атрибутов начинаются с подчеркивания.

Не существует встроенного способа получить это значение из шаблонов, поэтому вам придется определить метод модели, который возвращает этот атрибут, или для более общего / повторно используемого решения используйте фильтр шаблонов:

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

, который вы можете использовать в своем шаблоне как:

{{ obj | to_class_name }}
5 голосов
/ 04 июля 2011

Вы не можете получить доступ к имени класса напрямую.Делая что-то вроде этого:

{{ object.__class__ }}

вызовет TemplateSyntaxError: Variables and attributes may not begin with underscores.Django не позволяет вам получать доступ к этим видам атрибутов - соглашения Python означают, что они являются скрытыми деталями реализации, а не частью API объекта.

Вместо этого создайте фильтр шаблона, а затем вы можете использовать его следующим образом:

{{ object|model_name_filter }}

Создание фильтров очень просто: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

0 голосов
/ 06 апреля 2014

Начиная с версии 1.2 и может быть более ранней, Django имеет атрибут opts в шаблонах. Атрибут является ссылкой на model._meta Для доказательства вы должны посмотреть исходный код в Github

Используется в шаблоне очень просто: {{opts}} или {{opts.db_table}}

...