Пытается извлечь данные, но не отображается в шаблоне

#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 %}