[英]How to get model field value from model and field in django template?
我想創建一個模板,用於在表中打印模型的值。 這應該適用於各種模型。
我在想,當我將特定模型的所有對象放入行並將該模型的特定字段放入列時,我可以獲得單元格中的值。 這是我的想法:
# views.py
def users(request):
all_users = models.CustomUser.objects.all()
fieldnames = ['id', 'email', 'first_name', 'last_name', 'department']
fields = [all_users[0]._meta.get_field(field) for field in fieldnames]
context = {
'rows': all_users,
'columns': fields,
}
return render(request, 'table.html', context=context)
# table.html
<table>
<tr>
{% for col in columns %}
<th>{{ col.verbose_name }}</th>
{% endfor %}
</tr>
{% for row in rows %}
<tr>
{% for col in columns %}
<td>{{ row|col }}</td> # or row.col or row:col
{% endfor %}
</tr>
{% endfor %}
</table>
我要怎么去那兒? 這是正確的思考和做事方式嗎? 或者我應該在渲染之前以某種方式管理數據?
解決方案是創建自定義模板標簽。
在users/templatetags/table_tags.py
from django import template
register = template.Library()
@register.filter
def value_from_model(model, field):
return getattr(model, field)
在users/views.py
def users(request):
all_users = models.CustomUser.objects.all()
fieldnames = ['email', 'first_name', 'last_name', 'department']
fields = [all_users[0]._meta.get_field(field) for field in fieldnames]
context = {
'rows': all_users,
'cols': fields,
}
return render(request, 'users/table.html', context=context)
在users/templates/users/table.html
{% load table_tags %}
<table>
<tr>
{% for col in cols %}
<th>{{ col.verbose_name }}</th>
{% endfor %}
</tr>
{% for row in rows %}
<tr>
{% for col in cols %}
<td>{{ row|value_from_model:col.name }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
希望有人會發現這很有用:)
假設您的 customUser 模型具有與字段名稱相同的名稱
```python
def users(request):
all_users = models.CustomUser.objects.all()
list_colmns = ['id', 'email', 'first_name', 'last_name', 'department']
list_rows = []
for user in all_users:
list_rows.append(
[user.id, user.email, user.first_name, user.last_name, user.department])
return render(request, 'table.html', {"list_rows": list_rows, "list_colmns": list_colmns})
```
<table>
<tr>
{% for column in list_colmns %}
<th>{{ column }}</th>
{% endfor %}
</tr>
{% for row in list_rows %}
<tr>
{% for cell in row %}
<td>{{ cell }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.