ListView - представления на основе классов Django
Представление списка относится к представлению (логике) для отображения нескольких экземпляров таблицы в базе данных. Мы уже обсудили основы представления списка в представлении списка - представления на основе функций Django. Представления на основе классов предоставляют альтернативный способ реализации представлений как объектов Python вместо функций. Они не заменяют функциональные представления, но имеют определенные отличия и преимущества по сравнению с функциональными представлениями:
- Организация кода, связанного с конкретными методами HTTP (GET, POST и т. Д.), Может быть решена отдельными методами вместо условного перехода.
- Объектно-ориентированные методы, такие как миксины (множественное наследование), могут использоваться для разделения кода на повторно используемые компоненты.
Представлениями на основе классов проще и эффективнее управлять, чем представлениями на основе функций. Представление на основе функций с множеством строк кода может быть преобразовано в представления на основе классов всего несколькими строками. Именно здесь вступает в силу объектно-ориентированное программирование.
Представление списка Django - представления на основе функций
Illustration of How to create and use List view using an Example. Consider a project named geeksforgeeks
having an app named geeks
.
Refer to the following articles to check how to create a project and an app in Django.
- How to Create a Basic Project using MVT in Django?
- How to Create an App in Django ?
After you have a project and an app, let’s create a model of which we will be creating instances through our view. In geeks/models.py
,
# import the standard Django Model # from built-in library from django.db import models # declare a new model with a name "GeeksModel" class GeeksModel(models.Model): # fields of the model title = models.CharField(max_length = 200 ) description = models.TextField() # renames the instances of the model # with their title name def __str__( self ): return self .title |
After creating this model, we need to run two commands in order to create Database for the same.
Python manage.py makemigrations Python manage.py migrate
Now let’s create some instances of this model using shell, run form bash,
Python manage.py shell
Enter following commands
>>> from geeks.models import GeeksModel >>> GeeksModel.objects.create( title="title1", description="description1").save() >>> GeeksModel.objects.create( title="title2", description="description2").save() >>> GeeksModel.objects.create( title="title2", description="description2").save()
Now we have everything ready for back end. Verify that instances have been created from http://localhost:8000/admin/geeks/geeksmodel/
Class Based Views automatically setup everything from A to Z. One just needs to specify which model to create ListView for, then Class based ListView will automatically try to find a template in app_name/modelname_list.html
. In our case it is geeks/templates/geeks/geeksmodel_list.html
. Let’s create our class based view. In geeks/views.py
,
from django.views.generic. list import ListView from .models import GeeksModel class GeeksList(ListView): # specify the model for list view model = GeeksModel |
Now create a url path to map the view. In geeks/urls.py,
from django.urls import path # importing views from views..py from .views import GeeksList urlpatterns = [ path("", GeeksList.as_view()), ] |
Create a template in templates/geeks/geeksmodel_list.html
,
< ul > <!-- Iterate over object_list --> {% for object in object_list %} <!-- Display Objects --> < li >{{ object.title }}</ li > < li >{{ object.description }}</ li > < hr /> <!-- If objet_list is empty --> {% empty %} < li >No objects yet.</ li > {% endfor %} </ ul > |
Let’s check what is there on http://localhost:8000/
Manipulate Queryset in ListView
By default ListView will display all instances of a table in the order they were created. If one wants to modify the sequence of these instances or the ordering, get_queryset method need to be overriden.
In geeks/views.py
,
from django.views.generic. list import ListView from .models import GeeksModel class GeeksList(ListView): # specify the model for list view model = GeeksModel def get_queryset( self , * args, * * kwargs): qs = super (GeeksList, self ).get_queryset( * args, * * kwargs) qs = qs.order_by( "-id" ) return qs |
Now check, if the order of instances have been reversed.
This way one can modify the entire queryset in any manner possible.
Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.
To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning – Basic Level Course