Django for loop на html не может получить все поля данных для своих object_lists
Почему в моем файле output.htm, когда я использую теги шаблона django "for loop" для получения данных по {{ post.firstname }}, а также {{ post.surname }}, он не показывает никакого результата? Надеюсь на помощь. Заранее спасибо.
Ps: приведенный ниже код - это только часть работы. Это означает, что я не выписывал библиотеки python, полный html для нижеприведенного кода.
#views.py
class Student_list(View):
def get(self, request):
posts = Student.objects.all().values_list("firstname", "surname").union(Teacher.objects.all().values_list("firstname", "surname"))
"""raw sql => SELECT * FROM l2_OR_queries_student WHERE surname LIKE 'bald%' OR surname LIKE 'aus%' """
return render(request, "l4_UNION_queries/output.htm", context = {"posts": posts})
<!--output.htm -->
<table>
<tr>
<th>First Name</th>
<th>Surname</th>
</tr>
{% for post in posts %}
<tr>
<td>{{ post.firstname }}</td>
<td>{{ post.surname }}</td>
</tr>
{% endfor %}
</table>
student.sqlite3
id firstname surname age classroom teacher
4 shaina austin 20 1 trellany
5 raquel avery-parker 21 2 robin
6 lakisha baldwin 20 3 crystal
teacher.sqlite3
id firstname surname
9 trellany abraham
10 robin adkins
11 crystal allen
12 shaina young
У вас проблема с HTML-файлом. Поскольку у вас в наборе запросов есть заархивированные данные, поэтому текущая реализация не будет работать
Попробуйте это:
<table>
<tr>
<th>First Name</th>
<th>Surname</th>
</tr>
{% for firstname, surname in posts %}
<tr>
<td>{{ firstname }}</td>
<td>{{ surname }}</td>
</tr>
{% endfor %}
</table>
Если вы хотите использовать ваш текущий HTML, то вы должны изменить следующий код
posts = Student.objects.all().values_list("firstname", "surname").union(Teacher.objects.all().values_list("firstname", "surname"))
Должно быть
posts = Student.objects.all().values("firstname", "surname").union(Teacher.objects.all().values("firstname", "surname"))
posts = Student.objects.all().values("firstname", "surname").union(Teacher.objects.all().values("firstname", "surname"))
Вам необходимо использовать values()
вместо values_list()
, потому что values_list()
возвращает объекты в виде списка. Для доступа к ним по ключам просто используйте values()
.