Django: список имен полей и значений модели в шаблоне [дубликат]
Возможные Дубликаты:
Django-перебирать имена полей экземпляра модели и значения в шаблоне
Привет,
Я пытаюсь перечислить поля и соответствующие значения общих моделей Django в шаблонах. Однако я не могу найти встроенное решение для довольно распространенной проблемы. Я довольно близок к решению, но не могу найти выход.
Код view.py :
def showdetails(request, template):
objects = newivr1_model.objects.all()
fields = newivr1_model._meta.get_all_field_names()
return render_to_response(template, {'fields': fields,'objects':objects},
context_instance=RequestContext(request))
шаблон код:
<table>
{% for object in objects %}
<tr>
{% for field in fields %}
<td>
<!-- {{ object.field }} /*This line doesn't work*/ -->
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
что я должен делать в строке шаблона комментария, чтобы получить значение Object.поле?
любые лучшие сухие методы также приветствуются.
2 ответов
к сожалению, вы не можете делать такие поиски в движке шаблонов.
вам придется иметь дело с этим в представлении.
def showdetails(request, template):
objects = newivr1_model.objects.all()
for object in objects:
object.fields = dict((field.name, field.value_to_string(object))
for field in object._meta.fields)
return render_to_response(template, { 'objects':objects },
context_instance=RequestContext(request))
шаблон
{% for object in objects %}
<tr>
{% for field, value in object.fields.iteritems %}
<td>{{ field }} : {{ value }}</td>
{% endfor %}
</tr>
{% endfor %}
вам нужно создать свой собственный фильтр, который будет работать как getattr в python и использовать его в шаблоне:
{{ object|getattribute:field }}
здесь есть описание, как это сделать: выполнение поиска стиля getattr () в шаблоне django
но я не думаю, что это хорошая идея. Insted попробуйте сделать эту логику в представлении, например:
object_values = []
for object in objects
object_values.append([])
for field in fields:
object_values[-1].append(getattr(object, field))
return render_to_response(template, {'object_values': object_values},
context_instance=RequestContext(request))
и в шаблоне:
<table>
{% for values in object_values %}
<tr>
{% for value in values %}
<td>
{{ value }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
система шаблонов Django не предоставляет много функций (фильтры), потому что вы должны делать всю логику в представлениях. Шаблон должен содержать только данные.