簡體   English   中英

如何從django模板中的模型和字段中獲取模型字段值?

[英]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 模型具有與字段名稱相同的名稱

視圖.py

```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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM