写一个小需求的时候突然开悟了,模板和视图应该如何匹配,写一篇文字记录下
需求如下:
有一个图书管理页面,输入地址:ip:8000/index之后显示图书表里面所有的图书信息(只用显示名称),点击“新增”按钮之后,会在图书最下方显示一本新的书名“流星蝴蝶剑”;点击“删除”按钮之后,改行图书名称不在继续显示
需求很简单,分析一下,你需要准备一个图书的模型类,以及三个视图函数来依次实现展示、新增、删除的功能,还要再准备url地址来调用三个视图函数,最后就是要准备一个模板文件
如果要是换作了刚开始学习的时候,我会想着三个url地址,那肯定是要准备三个模板文件才行呀。但是刚才突然想明白了,我只需要一个模板就可以了,在其中设置另外两个url地址,让url可以正确完成路由匹配到对应的视图函数。因为需求说的很明确,不管你是“新增”还是“删除”操作,都是在一个页面内完成,并没有跳转过任何其他的也买你,所以呢就只需要在添加和删除的视图函数中,renturn到最开始的显示图书信息的视图函数就可以了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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路由的配置就不贴了,自行配置下吧