在django模板中使用for循环自动获取列的名称
Automatically get name of the column with for loop in django template
我想使用 for 循环自动检索列的名称。
如果我知道列的名称,我可以这样编写模板:
<ul>
{% for co in team %}
<li>{{ co.name }}</li>
<li>{{ co.team}}</li>
<li>{{ co.sport}}</li>
{% endfor %}
</ul>
但在我目前的情况下,我不知道 table 的列的名称。如何显示它们?
谢谢
您可以通过以下方式获取模型的字段:
fields = Model<b>._meta.get_fields()</b>
这是 Field
[GitHub] 个对象的元组。这些 Field
对象具有 name
属性,因此我们可以通过以下方式获取字段名称:
from operator import attrgetter
field_names = map(attrgetter('name'), Model._meta.get_fields())
如果我们不知道模型是什么,我们可以通过 type(..)
:
获得对模型实例模型的引用
fields = <b>type(some_instance)</b>._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]
包含 teams[i]
.
名称为 field_name[j]
的字段的值
我想使用 for 循环自动检索列的名称。 如果我知道列的名称,我可以这样编写模板:
<ul>
{% for co in team %}
<li>{{ co.name }}</li>
<li>{{ co.team}}</li>
<li>{{ co.sport}}</li>
{% endfor %}
</ul>
但在我目前的情况下,我不知道 table 的列的名称。如何显示它们?
谢谢
您可以通过以下方式获取模型的字段:
fields = Model<b>._meta.get_fields()</b>
这是 Field
[GitHub] 个对象的元组。这些 Field
对象具有 name
属性,因此我们可以通过以下方式获取字段名称:
from operator import attrgetter
field_names = map(attrgetter('name'), Model._meta.get_fields())
如果我们不知道模型是什么,我们可以通过 type(..)
:
fields = <b>type(some_instance)</b>._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]
包含 teams[i]
.
field_name[j]
的字段的值