Есть ли способ получить имя модели для любых объектов в шаблонах django. В ручном режиме мы можем попробовать его, определив методы в моделях или используя теги шаблонов... Но есть ли какой-либо встроенный способ?
Название модели объектов в шаблонах django
Ответ 1
object.__class__.__name__
или object._meta.object_name
должно указывать имя класса модели. Однако этот нельзя использовать в шаблонах, потому что имена атрибутов начинаются с подчеркивания.
Существует не встроенный способ получить это значение из шаблонов, поэтому вам нужно будет определить метод модели, который возвращает этот атрибут, или для более универсального/многоразового решения использовать фильтр шаблонов:
@register.filter
def to_class_name(value):
return value.__class__.__name__
который вы можете использовать в своем шаблоне как:
{{ obj | to_class_name }}
Ответ 2
Вы не можете получить доступ к имени класса напрямую. Делать что-то вроде этого:
{{ 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/
Ответ 3
Django добавил общедоступный API к параметрам модели под названием _meta, но вы по-прежнему не можете получить доступ к переменным с подчеркиванием в шаблоне. Используйте шаблонный фильтр:
@register.filter
def verbose_name(instance):
return instance._meta.verbose_name
В шаблоне:
{{ instance|verbose_name }}
Мне даже нравится связывать фильтр title
, чтобы использовать заглавные слова в моем шаблоне:
{{ instance|verbose_name|title }}
Ответ 4
Начиная с версии 1.2 и может быть ранней, Django имеет атрибут opts
в шаблонах. Атрибут - ссылка на model._meta
Для доказательства вы должны посмотреть исходный код в Github
Используется в шаблоне очень просто: {{opts}}
или {{opts.db_table}}