DetailView –基于类的视图Django

2021年3月9日16:10:52 发表评论 1,086 次浏览

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

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

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

Django DetailView –基于类的视图

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

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

在拥有一个项目和一个应用程序之后, 让我们创建一个模型, 我们将通过我们的视图创建该模型。在怪胎/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的所有内容。只需指定要为其创建DetailView的模型, 然后基于类的DetailView将自动尝试在其中查找模板。app_name / modelname_detail.html。在我们的情况下是geeks / templates / geeks / geeksmodel_detail.html。让我们创建基于类的视图。在geeks / views.py,

from django.views.generic.detail import DetailView
  
from .models import GeeksModel
  
class GeeksDetailView(DetailView):
     # specify the model to use
     model = GeeksModel

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

from django.urls import path
  
# importing views from views..py
from .views import GeeksDetailView
urlpatterns = [
     # <pk> is identification for id field, # slug can also be used
     path( '<pk>/' , GeeksDetailView.as_view()), ]

在中创建模板templates / geeks / geeksmodel_detail.html,

< h1 >{{ object.title }}</ h1 >
< p >{{ object.description }}</ p >

让我们检查一下

http://本地主机:8000/1 /

基于django-detailview-class

在DetailView中处理上下文数据

默认情况下, DetailView仅显示表的字段。如果要在将上下文数据发送到模板之前对其进行修改或添加一些额外的字段, 可以覆盖上下文数据。

In

geeks / views.py

,

from django.views.generic.detail import DetailView
  
from .models import GeeksModel
  
class GeeksDetailView(DetailView):
     # specify the model to use
     model = GeeksModel
  
     # override context data
     def get_context_data( self , * args, * * kwargs):
         context = super (GeeksDetailView, self ).get_context_data( * args, * * kwargs)
         # add extra field 
         context[ "category" ] = "MISC"        
         return context

Ingeeks / templates / geeksmodel_detail.html,

< h1 >{{ object.title }}</ h1 >
< p >{{ object.description }}</ p >
< p >{{ category }}</ p >

现在检查是否添加了类别。

django-detailview-geeksview

注意怪胎!巩固你的基础Python编程基础课程和学习基础知识。

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


木子山

发表评论

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