Django - 如何使用ListView和模板显示模型的所有字段?

时间:2017-03-03 19:46:24

标签: python django

我想创建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 |

我不想在模板文件中写入所有密钥,因为我的产品数据列太多了。

你能告诉我如何制作模板吗?

1 个答案:

答案 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