使用Django temp中的for循环自动获取列的名称

2024-04-25 09:39:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用for循环自动检索列的名称。 如果我知道列的名称,我可以用这种方式编写模板:

<ul>
{% for co in team %}
    <li>{{ co.name }}</li>
    <li>{{ co.team}}</li>
    <li>{{ co.sport}}</li>
{% endfor %}
</ul>

但在我目前的情况下,我不知道我的表的列的名称。如何显示它们?在

谢谢你


Tags: namein名称模板for方式情况li
1条回答
网友
1楼 · 发布于 2024-04-25 09:39:34

可以通过以下方式获取模型的字段:

fields = Model._meta.get_fields()

这是^{} [GitHub]对象的元组。这些Field对象有一个name属性,因此我们可以通过以下方式获得字段名:

^{pr2}$

如果我们不知道模型是什么,我们可以使用type(..)获得对模型实例模型的引用:

fields = type(some_instance)._meta.get_fields()

然而,所有这些逻辑并不真正属于Django模板,而是在视图中(根据设计,Django模板有点限制,以防止在模板中写入业务逻辑)。因此,我们可以将字段名列表传递给模板:

def some_view(request):
    teams = Team.objects.all()
    field_names = [f.name for f in Team._meta.get_fields()]
    return render(request, 'some_template.html',
        {'teams': teams, 'field_names': field_names}
    )

但是,如果您想打印这些团队的值,那么这仍然不起作用,因为我们不容易在模板中获得一个任意属性。然后我们可以再次将一些处理转移到视图:

from operator import attregetter

def some_view(request):
    teams = Team.objects.all()
    field_names = [f.name for f in Team._meta.get_fields()]
    atgetters = [attrgetter(fn) for fn in field_names]
    rows = [[ag(team) for ag in atgetters] for team in teams]
    return render(request, 'some_template.html',
        {'teams': teams, 'field_names': field_names, 'data': data}
    )

所以这里的data是一个包含列表的列表,这样data[i][j]包含了一个名为field_name[j]的字段的值,而teams[i]。在

相关问题 更多 >