#django
#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)
В моей таблице не отображаются данные.
Комментарии:
1. Чего вы ожидаете в
key
иvalue
?2. {‘user__username’: ‘bobo’} {‘user__username’: ‘malika’} Я пытаюсь получить только значение
Ответ №1:
users
это не dict, это набор запросов.
{% 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')
и model, а не .values()
. Простота может перевесить производительность.
Правка 2:
Если вам нужен список имен пользователей, вы можете сделать это:
usernames = Chat.objects.filter(room=pk).values_list('user__username', flat=True).distinct()
Это будет намного чище и по-прежнему будет делать то, что вы изначально хотели. Просто назовите переменную, чтобы указать, что это только имена пользователей.
Комментарии:
1. Строго говоря, это ValuesQuerySet, который похож на список dicts. Каждый
user
в этом цикле на самом деле является dict , хотя он имеет только одну пару ключ-значение.2. Я сделал это изначально и получил {‘user__username’: ‘bobo’} {‘user__username’: ‘malika’} Я пытаюсь получить только значение
3. Извините, я этого не расслышал. Я обновил ответ вместе со своей рекомендацией.
4. И отредактировано снова, чтобы показать вам другой способ сделать то, что вы изначально хотели.
Ответ №2:
Вы отправите набор запросов в шаблоне. Вы можете попробовать это
{% for value in users %}
<tr>
<td>{{ value.user__username }}</td>
</tr>
{% endfor %}