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

标签 python django for-loop templates

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

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

但就我目前的情况而言,我不知道表中列的名称。我怎样才能显示它们?

谢谢

最佳答案

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

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 模板,而是属于 View (根据设计,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}
    )

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

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]

关于python - 在django模板中使用for循环自动获取列的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51901590/

相关文章:

python - 将 seaborn lineplot 与分组变量一起使用

r - cumsum 与 r 中标记列的重置?

python - 可变 block 大小 Pandas Dataframe

python - 过滤掉特定的 Python 日志消息

Django 使用多个redis进行缓存

django - 如何将所有元数据包装到 "meta"属性中?

r - 如何在不使用 for 循环的情况下用 NA 替换数据帧行中的连续零?

Bash "for"循环,如果条件计数为零?

python - 访问装饰类

python - 使用django上传文件时如何创建年/月/日结构