I need to display several models name & objects in a template
Here is my view
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) )
And my template
{% 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 %}
Of course objs._meta.verbose_name
doesn’t work
Is there a way to access to this verbose name without having to create a function for each model or to assign the value from the view for each model ?
Advertisement
Answer
For accessing it in your template, you’ve probably noticed by now that Django doesn’t let you use underscore prefixes to access attributes from templates. Thus, the easiest way to access the verbose name for any given object without having to create a model method on each model would be to just create a template tag:
@register.simple_tag def get_verbose_name(object): return object._meta.verbose_name
Unrelated, but you have a bug in your template, in that you are trying to access the _meta attribute on a queryset instead of an object. So your title line should instead look something like:
{% with objs|first as obj %} <div class="title">{% get_verbose_name obj %}</div> {% endwith %}