写一个小需求的时候突然开悟了,模板和视图应该如何匹配,写一篇文字记录下

需求如下:

有一个图书管理页面,输入地址:ip:8000/index之后显示图书表里面所有的图书信息(只用显示名称),点击“新增”按钮之后,会在图书最下方显示一本新的书名“流星蝴蝶剑”;点击“删除”按钮之后,改行图书名称不在继续显示

 需求很简单,分析一下,你需要准备一个图书的模型类,以及三个视图函数来依次实现展示、新增、删除的功能,还要再准备url地址来调用三个视图函数,最后就是要准备一个模板文件

如果要是换作了刚开始学习的时候,我会想着三个url地址,那肯定是要准备三个模板文件才行呀。但是刚才突然想明白了,我只需要一个模板就可以了,在其中设置另外两个url地址,让url可以正确完成路由匹配到对应的视图函数。因为需求说的很明确,不管你是“新增”还是“删除”操作,都是在一个页面内完成,并没有跳转过任何其他的也买你,所以呢就只需要在添加和删除的视图函数中,renturn到最开始的显示图书信息的视图函数就可以了

 1 class BookInfo(models.Model):
 2     """图书模型类"""
 3     # 书名
 4     btitle = models.CharField(max_length=50)
 5     # 出版日期
 6     bpub_date = models.DateField()
 7     # 阅读数量
 8     bread = models.IntegerField(default=0)
 9     # 评论量
10     bcommon = models.IntegerField(default=0)
11     # 是否删除
12     isDelete = models.BooleanField(default=False)
13  
14     def __str__(self):
15         return self.btitle
模型类
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>首页</title>
 6 </head>
 7 <body>
 8 <a href="/insert">新增</a>
 9 <ul>
10     {% for book in books %}
11         {% if not book.isDelete %}
12             <li>{{ book.btitle }}--<a href="/delete/{{ book.id }}">删除</a> </li>
13         {% endif %}
14     {% endfor %}
15 </ul>
16 </body>
17 </html>
模板文件
 1 from django.shortcuts import render
 2 from booktest.models import BookInfo,HeroInfo
 3 from datetime import date
 4  
 5  
 6 # Create your views here.
 7 def show_books(request):
 8     """显示图书信息的函数"""
 9     # 需要获取所有图书的信息
10     books = BookInfo.objects.all()
11     print(books)
12     return render(request, 'bookset/index.html', {'books': books})
13  
14  
15 def insert_book(request):
16     """新增图书信息,增加一条书-流星蝴蝶剑"""
17     book = BookInfo()
18     book.btitle = '流星蝴蝶剑'
19     book.bpub_date = date(2010, 1,1)
20     book.bread = 20
21     book.bcommon = 30
22     book.isDelete = False
23     book.save()
24     return show_books(request)
25  
26  
27 def delete_book(request, bid):
28     """删除图书信息"""
29     book = BookInfo.objects.get(id=bid)
30     book.isDelete = True
31     book.save()
32     return show_books(request)
33  
视图函数

 

url路由的配置就不贴了,自行配置下吧

posted on 2020-03-15 23:16  Monkey大圣  阅读(598)  评论(0编辑  收藏  举报