截至目前,通过下列几篇文章,针对遵循MVT
模式的Django,我们已经做了如下学习:
- 【Django入门】——MVC和MVT两种模式的异同:了解了
MVT
和MVC
两种设计模式的异同,并知道了Django遵循所谓的MVT
模式,该模式将框架分为三个模块:M
(模型)、V
(视图)、T
(模板); - 【Django入门】——Django中通过模型类实现数据表基本操作:通过案例了解了如何使用模型模块操作数据库;
- 【Django入门】——Django中视图函数和模板文件的使用:通过案例了解了如何使用视图和模板模块响应并返回浏览器的请求。
为了对Django的M
、V
、T
三个模块有一个整体的认识,本文使用下列文章中已有的基础实现一个综合案例:
- 【Django入门】——从零开始创建并启动一个Django项目,使用其中创建的应用
booktest
; - 【Django入门】——Django中通过模型类实现数据表基本操作,使用其中创建的模型类
BookInfo
、HeroInfo
及其分别对应的数据表booktest_bookinfo
和booktest_heroinfo
,且:
booktest_bookinfo
数据表中所有记录为:
id | book_title | book_pub_date |
---|---|---|
2 | 天龙八部 | 1960-01-01 |
3 | 射雕英雄传 | 2017-12-13 |
booktest_heroinfo
数据表中所有记录为:
id | hero_name | hero_gender | hero_desc | hero_book_id |
---|---|---|---|---|
1 | 段誉 | 0 | 六脉神剑 | 2 |
2 | 乔峰 | 0 | 降龙十八掌 | 2 |
3 | 虚竹 | 0 | 天山折梅手 | 2 |
该综合案例的需求为:
# 1.
在本机浏览器上输入127.0.0.1:8000/books
时,浏览器显示booktest_bookinfo
表中所有记录的book_title
字段值:
图书信息如下:
- 天龙八部
- 射雕英雄传
# 2.
当进一步点击图书标题时,则按照规则进一步显示对应图书中所有英雄的hero_name
和hero_desc
字段值。
一、案例初步实现
首先实现需求# 1
,然后再实现# 2
。
1. 设计视图函数
由于视图函数主要负责从模型处获取数据,将数据给到特定的模板进行渲染后返回用户展示,因此首先需要设计如下视图函数:
from django.shortcuts import render
from booktest.models import BookInfo # 导入图书模型类
# Create your views here.
def show_books(request):
"""显示图书信息"""
# 1. 通过M(模型)查找图书表booktest_bookinfo中的所有数据
books = BookInfo.objects.all()
# 2. 使用T(模板文件),返回结果给浏览器
return render(request=request,
template_name='booktest/show_books.html',
context={
'books': books