尝试输出数据但未显示在模板中

时间:2019-04-24 14:32:02

标签: django

我正在尝试将数据传递到模板,但没有显示

<div id="table">
    <table id="table_id">
        <thead>
            <tr>
                 <th>Name</th>
            </tr>
        </thead>
        <tbody>
        {% for key, value in users.items %}
            <tr>
                 <td>{{ key }}{{ value }}</td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
  </div>

这是视图

@login_required
    def event_detail(request, pk):
        messages = Chat.objects.filter(room=pk)
        users = Chat.objects.filter(room=pk).values('user__username').distinct()
        event_users = Event.objects.filter(id=pk)
        response_data = {
            'messages': messages,
            'pk': pk,
            'users': users
        }
        return render(request, 'chat/event_detail.html', response_data)

我的表格未显示数据。

2 个答案:

答案 0 :(得分:2)

users不是字典,而是QuerySet。

{% for user_values in users %}
    <tr>
         {% for key, value in user_values.items %}
             <td>{{ key }}: {{ value }}</td>
         {% endfor %}
    </tr>
{% endfor %}

编辑:

我对其进行了更改,以支持您使用.values()。但是,除非您有充分的理由这样做,否则建议您使用ORM,.select_related('user')和模型实例,而不要使用.values()。简单可以胜过性能。

编辑2:

如果需要用户名列表,可以执行以下操作:

usernames = Chat.objects.filter(room=pk).values_list('user__username', flat=True).distinct()

这将更加清洁,并且仍然可以执行您最初想要的操作。只需命名变量以表明它只是用户名。

答案 1 :(得分:0)

您将在模板中发送查询集。你可以试试这个

{% for value in users %}
     <tr>
           <td>{{ value.user__username }}</td>
     </tr>
{% endfor %}