Вы не можете получить доступ к verbose_name напрямую из шаблона.Из того, что я вижу, у вас есть три варианта.
Вариант один (самый простой).Назначьте подробное имя в вашем контроллере, а затем получите доступ к нему из шаблона:
# in controller
render_to_response('template.html', {'scrib_verbose_name': Scrib._meta.verbose_name})
# in a view template.html
Verbose name of a Scrib model: {{ scrib_verbose_name }}
Вариант второй: напишите себе помощник вида, который будет возвращать verbose_name (или другое поле из класса _meta) для данного класса.
Обновление Третий вариант (полезная подсказка для Uku Loskit) - определите метод в модели scrib, который возвращает мета-объект (или любое конкретное поле из него).
# method in a Scrib model
def meta(self):
return self._meta
# later on in a template - scrib is a instance of Scrib model
<h1>{{ scrib.meta.verbose_name }}</h1>
Update2 Если вы настаиваете на прямом доступе к подробному имени из scribs
(что является результатом Scrib.objects.all()
), то вы можете делать такие вещи, как:
scribs = Scrib.objects.all()
scribs.verbose_name = Scrib._meta.verbose_name
# in a template you can now access verbose name from a scribs variable
{{ scribs.verbose_name }}
Update3 Еще один способ - использовать наследование модели, чтобы иметь возможность получить доступ к подробному имени из экземпляра любой модели, которая наследуется от нашей пользовательской.
# base model (inherits from models.Model)
class CustomModel(models.Model):
def meta(self):
return self._meta
class Meta:
abstract = True
# Scrib now inherit from CustomModel
class Scrib(CustomModel):
# do any stuff you want here ...
Scrib теперь наследуется отCustomModel, которая предоставляет нам свойство meta .Любая модель, которая будет наследоваться от класса CustomModel, будет иметь это свойство.Это самое чистое и гибкое решение.