Django, как перебрать объект контекста, переданный обратно через общий подробный вид?
Я использую общий DetailView для отображения объекта проекта. Могу ли я как-то перебрать поля в моем шаблоне или мне нужно разместить каждое поле?
url(r'^(?P<slug>[-\w]+)/$', DetailView.as_view(model=Project,
template_name='projects/detail_project.html',slug_field='slug',
context_object_name='project'), name='project_detail'),
У меня есть что-то вроде этого в моем шаблоне:
{{ project.title }}
{{ project.created_date }}
так далее...
Есть ли способ сделать что-то подобное?
<table>
{% for field in project %}
<tr>
<td>{{ field }}</td>
</tr>
{% endfor %}
</table>
Я попробовал приведенный выше фрагмент и получил эту ошибку:
Caught TypeError while rendering: 'Project' object is not iterable
1 ответ
Решение
Обычно лучше всего размещать каждое поле, но если вы просто хотите сбросить все поля, вы можете сделать что-то вроде:
# models.py
class Project(models.Model):
...
def get_field_values(self):
return [field.value_to_string(self) for field in Project._meta.fields]
тогда вы могли бы сделать
<table>
{% for value in project.get_field_values %}
<tr>
<td>{{ value }}</td>
</tr>
{% endfor %}
</table>