详细视图是指一种视图(逻辑), 用于显示数据库中表的一个实例。我们已经在中讨论了细节视图的基础细节视图–基于函数的视图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 makemigrationsPython 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 /
文章图片
基于类的视图会自动设置从A到Z的所有内容。只需指定要为其创建DetailView的模型, 然后基于类的DetailView将自动尝试在其中查找模板。app_name / modelname_detail.html。在我们的情况下是geeks / templates / geeks / geeksmodel_detail.html。让我们创建基于类的视图。在geeks / views.py,
from django.views.generic.detail import DetailViewfrom .models import GeeksModelclass 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 /
文章图片
在DetailView中处理上下文数据
默认情况下, DetailView仅显示表的字段。如果要在将上下文数据发送到模板之前对其进行修改或添加一些额外的字段, 可以覆盖上下文数据。
In
geeks / views.py
,
from django.views.generic.detail import DetailViewfrom .models import GeeksModelclass 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 >
现在检查是否添加了类别。
文章图片
注意怪胎!巩固你的基础Python编程基础课程和学习基础知识。
【DetailView –基于类的视图Django】首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。
推荐阅读
- Perl中的软件包详细指南
- 计算机网络简明教程(四)(网络性能指标分析详解)
- 10道Vue.js精简经典面试题及答案——面试必备
- 计算机网络简明教程(三)(网络分类详解)
- 7个vue前端ui框架——前端程序员必须掌握
- vue+element跨行跨列合并
- 超简单!Linux VIM自动补全YouCompleteMe使用Vundle快速安装
- Wildpackets Omnipeek 11.0.1 64X+注册机 网络抓包分析工具百度网盘下载
- Linux socket网络编程(一)(TCP编程实例、socket编程函数、套接字类型和网络模型)