Django - шаблон отображения модели verbose_names & objects - PullRequest
6 голосов
/ 15 сентября 2011

Мне нужно отобразить несколько моделей и объектов в шаблоне

Вот мой просмотр

def contents(request):
  """Lists contents"""
  objects = [
    Model1.objects.all(),
    Model2.objects.all(),
    Model3.objects.all(),
    Model4.objects.all(),
  ]
  return render_to_response('content/contents.html', objs
  , context_instance=RequestContext(request)
  )

И мой шаблон

{% for objs in objects %}
  <div class="content">
    <div class="title">{{ objs._meta.verbose_name }}</div>
    <ul>
    {% for obj in objs %}
      <li>{{ obj }}</li>
    {% endfor %}
    </ul>
  </div>
{% endfor %}

Конечно objs._meta.verbose_name не работает

Есть ли способ получить доступ к этому подробному имени без необходимости создания функции для каждой модели или присвоения значения из представлениядля каждой модели?

Ответы [ 2 ]

12 голосов
/ 15 сентября 2011

Для доступа к нему в вашем шаблоне вы, вероятно, уже заметили, что Django не позволяет вам использовать префиксы подчеркивания для доступа к атрибутам из шаблонов.Таким образом, самый простой способ получить доступ к подробному имени для любого данного объекта без необходимости создания метода модели для каждой модели - это просто создать тег шаблона:

@register.simple_tag 
def get_verbose_name(object): 
    return object._meta.verbose_name

Не связано, но у вас есть ошибка вваш шаблон, в котором вы пытаетесь получить доступ к атрибуту _meta в наборе запросов вместо объекта.Таким образом, ваша строка заголовка должна выглядеть примерно так:

{% with objs|first as obj %}
    <div class="title">{% get_verbose_name obj %}</div>
{% endwith %}
0 голосов
/ 17 мая 2019

Метка:

@register.simple_tag
def get_verbose_name(object, fieldnm): 
  return object._meta.get_field(fieldnm).verbose_name

HTML (год - это название моего поля в моей модели)

<td><label class="control-label text-lg text-info"> {% get_verbose_name object 'year' %} </label></td>

Благодаря ссылке выше. Хотел поделиться тем, что нашел в случае, если другие ищут то же решение, которое я нашел для моей ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...