ListView用法示例–基于类的视图Django

2021年4月1日17:57:30 发表评论 1,066 次浏览

列表视图是指用于显示数据库中表的多个实例的视图(逻辑)。我们已经在中讨论了列表视图的基础列表视图–基于函数的视图Django。基于类的视图提供了一种将视图实现为Python对象而非函数的替代方法。它们不能代替基于功能的视图, 但是与基于功能的视图相比具有某些区别和优点:

  • 与特定的HTTP方法(GET, POST等)相关的代码组织可以通过单独的方法而不是条件分支来解决。
  • 诸如mixin(多重继承)之类的面向对象技术可用于将代码分解为可重用组件。

与基于函数的视图相比, 基于类的视图更易于管理。具有大量代码行的基于函数的视图可以转换为仅包含几行代码的基于类的视图。这就是面向对象编程的影响。

Django列表视图–基于函数的视图

的插图如何创建和使用列表视图用一个例子。考虑一个名为极客有一个名为极客.

请参阅以下文章, 以检查如何在Django中创建项目和应用。如何在Django中使用MVT创建基本项目?如何在Django中创建应用程序?

在拥有一个项目和一个应用程序之后, 让我们创建一个模型, 我们将通过我们的视图创建该模型。在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

创建此模型后, 我们需要运行两个命令以便为同一数据库创建数据库。

Python manage.py makemigrations
Python manage.py migrate

现在, 让我们使用Shell创建该模型的一些实例, 运行表格bash,

Python manage.py shell

输入以下命令

>>> 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()

现在, 我们已经为后端做好了一切准备。验证是否已从创建实例http:// localhost:8000/admin/geeks/geeksmodel /

django-listview-check-models-instances

基于类的视图会自动设置从A到Z的所有内容。只需指定要为其创建ListView的模型, 然后基于类的ListView将自动尝试在其中找到模板app_name/modelname_list.html。在我们的情况下是geeks/templates/geeks/geeksmodel_list.html。让我们创建基于类的视图。在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

现在创建一个URL路径以映射视图。在geeks/urls.py中,

from django.urls import path
  
# importing views from views..py
from .views import GeeksList
urlpatterns = [
     path('', GeeksList.as_view()), ]

在中创建模板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 >

让我们检查一下

http://localhost:8000 /

django-listview-class-based-views

在ListView中操作Queryset

默认情况下, ListView将按创建顺序显示表的所有实例。如果要修改这些实例的顺序或顺序, 则需要重写get_queryset方法。

在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

现在检查实例顺序是否已颠倒。

django反向列表视图类

这样一来, 就可以以任何可能的方式修改整个查询集。

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: