Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django模板中使用for循环自动获取列的名称_Python_Django_Templates_For Loop_Columnname - Fatal编程技术网

Python 在django模板中使用for循环自动获取列的名称

Python 在django模板中使用for循环自动获取列的名称,python,django,templates,for-loop,columnname,Python,Django,Templates,For Loop,Columnname,我想用for循环自动检索列的名称。 如果我知道列的名称,我可以这样编写模板: <ul> {% for co in team %} <li>{{ co.name }}</li> <li>{{ co.team}}</li> <li>{{ co.sport}}</li> {% endfor %} </ul> {团队%中的co为%0} {{co.name}} {{co.team}}

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

<ul>
{% for co in team %}
    <li>{{ co.name }}</li>
    <li>{{ co.team}}</li>
    <li>{{ co.sport}}</li>
{% endfor %}
</ul>
    {团队%中的co为%0}
  • {{co.name}}
  • {{co.team}}
  • {{co.sport}
  • {%endfor%}
但在我现在的例子中,我不知道表中列的名称。如何显示它们


谢谢

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

fields = Model._meta.get_fields()
如果我们不知道模型是什么,我们可以使用
类型(..)
获取对模型实例模型的引用:

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

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\u name[j]
的字段的值,对于
teams[i]

我认为您应该在视图中编写这个逻辑,而不是在模板中。Django模板的可扩展性已受到限制(有意),以避免人们在模板中编写此类行为。检查此答案==>
fields = type(some_instance)._meta.get_fields()
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}
    )