Отображение данных в модальной форме через django
Я совсем новичок в django. Я пытаюсь отобразить подробности записи студента в модальной форме после нажатия кнопки Подробности. Но она показывает пустую модальную форму. Ниже приведен фрагмент кода. Пожалуйста, дайте мне знать, если я делаю что-то неправильно. Заранее спасибо.
Вот мнения
def student(request):
students = Student.objects.values("standard__standard_name", "studentid","firstname","lastname","status","nationality","Gender")
return render(request, 'student.html', { 'students':students })
def student_detail(request, studentid):
try:
student_object = Student.objects.filter(studentid=studentid)
student = student_object.values("studentid","firstname","lastname","standard__standard_name","status","nationality","dob","Gender","religion","parent__parentid")
print(student)
except student.DoesNotExist:
raise Http404('student not found')
return render(request, 'student_detail.html', {'student':student})
student.html фрагмент
<div class="tab-pane fade show active" id="show-students-pane" role="tabpanel" aria-labelledby="show-students" tabindex="0">
<table class="table table-striped table-bordered table-hover">
<th>Name</th>
<th>Standard</th>
<th>Gender</th>
<th>Status</th>
<th>Nationality</th>
{% for student in students %}
<div class="studentname">
<tr>
<td>{{ student.firstname |capfirst }} {{ student.lastname |capfirst }}</td></a>
<td>{{ student.standard__standard_name }}</td>
<td>{{ student.Gender }} </td>
<td>{{ student.status }} </td>
<td>{{ student.nationality }} </td>
<td><button type="button" class="modalbtn btn btn-primary" data-bs-toggle="modal" data-bs-target="#studentModal" onclick="localtion.href='/student/<studentid>/detail/ student.studentid'">Details</button></td>
</tr>
</div>
{% endfor %}
</table>
<div class="modal" id="studentModal">
<div class="modal-dialog">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="modal-title" id="studentModal">{{ student.firstname }}</h4>
<button type="button" class="btn-close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<!-- Modal body -->
<div class="modal-body">
{% include 'student_detail.html' %}
</div>
<!-- Modal footer -->
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
student_detail.html
<table class="table table-striped table-bordered table-hover" >
{% for s in student %}
<tr>
<th>Name</th>
<td>{{ s.firstname |capfirst }} {{ s.lastname|capfirst }}</td>
</tr>
<tr>
<th>FirstName</th>
<td>{{ s.firstname }}</td>
</tr>
<tr>
<th>LastName</th>
<td>{{ s.lastname }}</td>
</tr>
<tr>
<th>Standard</th>
<td>{{ s.standard__standard_name }}</td>
</tr>
<tr>
<th>DOB</th>
<td>{{ s.dob }}</td>
</tr>
<tr>
<th>Gender</th>
<td>{{ s.Gender }}</td>
</tr>
<tr>
<th>Nationality</th>
<td>{{ s.nationality }}</td>
</tr>
<tr>
<th>Religion</th>
<td>{{ s.religion }}</td>
</tr>
<tr>
<th>Parent</th>
<td>
{{ s.parent__parentid }}
</td>
</tr>
{% endfor %}
</table>
urls.py
path('student/', views.student, name='student'),
path('student/<studentid>/detail/', views.student_detail, name='student_detail'),
Кажется, я понял, в чем проблема. На странице с подробной информацией о студенте вы передаете только одного студента! Так почему же вы именно зацикливаете?????? Ваши теги должны выглядеть так:
{{student.first_name}}
{{student.last_name}}
Но это не так, потому что если вы перебираете в цикле obj студента, то получите ошибку. Дело в том, что вы перебираете студентов, даже не передавая их в шаблон!
У меня есть и другие предложения!
Ваш url для student_detail :
path('student/<int:studentid>/detail/', views.student_detail, name='student_detail')
Я просто добавил int перед studentid, я думаю, что это лучшая практика,
Другой совет - использовать теги django и тег a вместо js в кнопке "Подробности":
<a href="{% url 'student_detail' %}">Details</a>
В таких случаях я сам предпочитаю теги, а не кнопки