我想在我的模板中显示以下内容:
姓名:约翰
年龄:18
城市:纽约
例如,使用以下代码:
views.py
def person_details(request,pk):
person = get_object_or_404(Person, id=pk)
return render(request, 'template.html', {'person': person, 'person_fields': person._meta.get_fields()})
template.html
{% for field in person_fields %}
<div class="col-4 form-group">
<p><strong>{{ field.verbose_name }}:</strong> {{ person[ field.name ] }}</p>
</div>
{% endfor %}
这在python中可能吗?我问是因为我有一个大约有20个字段的模型,而对模板中的字段进行硬编码会有点困难。
答案 0 :(得分:2)
您可以使用Django的 to-python 查询集序列化程序。
只需在您的视图中添加以下代码:
from django.core import serializers
data = serializers.serialize( "python", SomeModel.objects.all() )
然后在模板中:
{% for instance in data %}
{% for field, value in instance.fields.items %}
{{ field }}: {{ value }}
{% endfor %}
{% endfor %}
它的一大优点是它处理关系字段。
对于字段子集,请尝试:
data = serializers.serialize('python', SomeModel.objects.all(), fields=('name','size'))
答案 1 :(得分:0)
故意故意限制Django模板,因此很难编写业务逻辑(或几乎不可能)。通常在模型或视图层执行这种逻辑。
def person_details(request, pk):
person = get_object_or_404(Person, id=pk)
person_data = {
f.verbose_name: getattr(person, f.name, None)
for f in person._meta.get_fields()
}
return render(request, 'template.html', {'person': person, 'person_data': person_data })
,然后使用:
{% for ky, val in person_data.items %}
<div class="col-4 form-group">
<p><strong>{{ ky }}:</strong> {{ val }}</p>
</div>
{% endfor %}
但是,建议不要自己进行序列化,而要使用其他these listed in this answer之类的序列化方法。