我想创建HTML模板,如下所示。
·models.py
class Client(Model):
name = CharField(max_length=50)
email = EmailField(max_length=100, verbose_name="E-mail")
title = CharField(max_length=50)
department = CharField(max_length=50)
·数据
| Name | Mail | Title | Department |
| John | john@mailaddress.com | engineer | development |
| Bob | bob@mailaddress.com | engineer | development |
| Sam | sam@mailaddress.com | engineer | development |
·views.py
class myListView(, ListView):
model = Client
template_name = "template.html"
·template.html
<table>
<tbody>
{% for item in object_list %}
<tr>
<td>{{ item }}</td>
</tr>
{% endfor %}
<!--- table items end -->
</tbody>
</table>
·期望(表)
| John | john@mailaddress.com | engineer | development |
| Bob | bob@mailaddress.com | engineer | development |
| Sam | sam@mailaddress.com | engineer | development |
我不想在模板文件中写入所有密钥,因为我的产品数据列太多了。
你能告诉我如何制作模板吗?
答案 0 :(得分:0)
基本上,在模板中渲染模型就是这样;
{% for item in object_list %}
<tr>
<td>{{ item.name }}</td>
<td>{{ item.email }}</td>
<td>{{ item.title }}</td>
<td>{{ item.department }}</td>
</tr>
{% endfor %}
但是,如果您不想在模板文件中写入所有键。你可以在你的模型中处理它。一个例子:
class Client(Model):
name = CharField(max_length=50)
email = EmailField(max_length=100, verbose_name="E-mail")
title = CharField(max_length=50)
department = CharField(max_length=50)
def get_string_fields(self):
return '%(name)s - %(email)s - %(title)s - %(department)s' % {
'name': self.name, 'email': self.email,
'title': self.title, 'department': self.department}
然后,在你的模板中应该是..
{% for item in object_list %}
<tr>
<td>{{ item.get_string_fields }}</td>
</tr>
{% endfor %}
或者,您可以使用__str__
(Python3)和__unicode__
(Python2)返回相同功能{{1 }} 以上。然后,如果您在get_string_fields(self)
之后的模板中进行渲染,则应返回{{ item }}
或__str__
函数的内容。
像这样使用__unicode__
answer。 _meta
将为您提供所有模型的字段名称,然后您可以使用model._meta.get_all_field_names()
来查找详细名称,并使用model._meta.get_field()
从模型中获取值。
注意:django 1.9中不推荐使用getattr(model_instance, 'field_name')
。而是使用model._meta.get_all_field_names()
获取模型的字段,使用model._meta.get_fields()
获取每个字段名称。一个例子:
field.name