我想创建如下所示的 HTML 模板。
\n\n\xe3\x83\xbbmodels.py
\n\nclass Client(Model):\nname = CharField(max_length=50)\nemail = EmailField(max_length=100, verbose_name="E-mail")\ntitle = CharField(max_length=50)\ndepartment = CharField(max_length=50)\nRun Code Online (Sandbox Code Playgroud)\n\n\xe3\x83\xbbData
\n\n| Name | Mail | Title | Department |\n| John | john@mailaddress.com | engineer | development |\n| Bob | bob@mailaddress.com | engineer | development |\n| Sam | sam@mailaddress.com | engineer | development |\nRun Code Online (Sandbox Code Playgroud)\n\n\xe3\x83\xbbviews.py
\n\nclass myListView(, ListView):\nmodel = Client\ntemplate_name = "template.html"\nRun Code Online (Sandbox Code Playgroud)\n\n\xe3\x83\xbbtemplate.html
\n\n <table>\n <tbody>\n {% for item in object_list %}\n <tr>\n <td>{{ item }}</td>\n </tr>\n {% endfor %}\n <!--- table items end -->\n </tbody>\n </table>\nRun Code Online (Sandbox Code Playgroud)\n\n\xe3\x83\xbb期望(表)
\n\n| John | john@mailaddress.com | engineer | development |\n| Bob | bob@mailaddress.com | engineer | development |\n| Sam | sam@mailaddress.com | engineer | development |\nRun Code Online (Sandbox Code Playgroud)\n\n我不想在模板文件中写入所有键,因为我的产品数据有太多列。
\n\n你能告诉我如何制作模板吗?
\n基本上,在模板中渲染模型就像这样;
{% for item in object_list %}
<tr>
<td>{{ item.name }}</td>
<td>{{ item.email }}</td>
<td>{{ item.title }}</td>
<td>{{ item.department }}</td>
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
但是,如果您不想将所有密钥写入模板文件中。您也可以在模型中处理它。一个例子:
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}
Run Code Online (Sandbox Code Playgroud)
然后,在你的模板中应该是..
{% for item in object_list %}
<tr>
<td>{{ item.get_string_fields }}</td>
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用__str__ (Python3)和__unicode__ (Python2)返回与get_string_fields(self)上面相同的函数。然后,如果您在模板中渲染以下内容{{ item }},应该返回您从函数中获得的__str__内容__unicode__。
_meta像这样使用答案。model._meta.get_all_field_names()将为您提供模型的所有字段名称,然后您可以使用model._meta.get_field()它来获取详细名称,并getattr(model_instance, 'field_name')从模型中获取值。
注意:model._meta.get_all_field_names()在 django 1.9 中已弃用。相反,用于model._meta.get_fields()获取模型的字段并field.name获取每个字段名称。一个例子:
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):
# list of some excluded fields
excluded_fields = ['id', 'pk']
# getting all fields that available in `Client` model,
# but not in `excluded_fields`
field_names = [field.name for field in Client._meta.get_fields()
if field.name not in excluded_fields]
values = []
for field_name in field_names:
# get specific value from instanced object.
# and outputing as `string` value.
values.append('%s' % getattr(self, field_name))
# joining all string values.
return ' | '.join(values)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4863 次 |
| 最近记录: |