8 a] For students enrolment create a generic class view which displays list of students and detail view that displays student details for any selected student in the list.
To create a generic class-based view in Django that handles student enrollment, we’ll create two views:
StudentListView
: Displays a list of all students.StudentDetailView
: Displays the details of a selected student.
Step 1: Define the Model
First, ensure that you have a Student
model defined in your models.py
file. Here’s a basic example:
# models.py from django.db import models class Student(models.Model): first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) enrollment_number = models.CharField(max_length=20, unique=True) date_of_birth = models.DateField() email = models.EmailField(unique=True) enrolled_date = models.DateField(auto_now_add=True) def __str__(self): return f"{self.first_name} {self.last_name}" def get_absolute_url(self): from django.urls import reverse return reverse('student_detail', kwargs={'pk': self.pk})
Step 2: Create the Views
Next, create the generic views in your views.py
file:
# views.py from django.views.generic import ListView, DetailView from .models import Student class StudentListView(ListView): model = Student template_name = "student_list.html" context_object_name = "students" class StudentDetailView(DetailView): model = Student template_name = "student_detail.html" context_object_name = "student"
Step 3: Define the URLs
Add the URLs for the list and detail views in your urls.py
file:
# urls.py from django.urls import path from .views import StudentListView, StudentDetailView urlpatterns = [ path('students/', StudentListView.as_view(), name='student_list'), path('students/<int:pk>/', StudentDetailView.as_view(), name='student_detail'), ]
Step 4: Create the Templates
Create the templates to display the list of students and the details of a selected student.
a. Template for Student List (student_list.html
)
<!-- student_list.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Student List</title> </head> <body> <h1>Student List</h1> <ul> {% for student in students %} <li> <a href="{% url 'student_detail' student.pk %}"> {{ student.first_name }} {{ student.last_name }} ({{ student.enrollment_number }}) </a> </li> {% endfor %} </ul> </body> </html>
b. Template for Student Detail (student_detail.html
)
<!-- student_detail.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Student Detail</title> </head> <body> <h1>{{ student.first_name }} {{ student.last_name }}</h1> <p><strong>Enrollment Number:</strong> {{ student.enrollment_number }}</p> <p><strong>Date of Birth:</strong> {{ student.date_of_birth }}</p> <p><strong>Email:</strong> {{ student.email }}</p> <p><strong>Enrolled Date:</strong> {{ student.enrolled_date }}</p> <a href="{% url 'student_list' %}">Back to Student List</a> </body> </html>
Step 5: Run the Server
Finally, make sure everything is set up correctly:
- Run migrations if you haven’t done so already:
python manage.py makemigrations python manage.py migrate
- Start the Django development server:
python manage.py runserver