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.field 的值呢?
如果有更好的、符合 DRY 原则的方法也欢迎分享。
2 个回答
3
你需要创建一个自己的过滤器,它的功能和Python中的getattr一样,然后在模板中使用它:
{{ object|getattribute:field }}
这里有个说明,教你怎么做:在Django模板中执行getattr()风格的查找
不过我觉得这样做并不是个好主意。你可以尝试把这个逻辑放在视图中,像这样:
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的模板系统并没有提供很多功能(过滤器),因为你应该在视图中处理所有的逻辑。模板只需要展示数据。
5
很遗憾,你不能在模板引擎里这样查找数据。
你需要在视图中处理这个问题。
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 %}