一:filter查询可以方便的查询出我们需要使用的信息:
defblogdetail(request,aricle_id):
contenx={}
detail= contenx['detail'] = get_object_or_404(Blog,pk =aricle_id)
contenx['blog_previous'] = Blog.objects.filter(create_time__gt = detail.create_time).last()#得到上一页信息
contenx['blog_next'] = Blog.objects.filter(create_time__lt = detail.create_time).first()#下一页信息
contenx['detail'] =detailreturn render_to_response('blog/detail.html',contenx)
一、下面来看看:filter查询:
1.__contains(包含)
shell命令下查询:Blog.objects.filter(title__contains ="django")------------------>返回一个queryset[]查询(查询集)只能输入一个值。加上一个"i"后不区别大小写【sql等数据库中】
2.__in (其中之一,可以传入一个列表,传多个值。)
Blog.objects.filter(id__in = [3,6,9])
3.__range(一个范围,使用元祖):
> Blog.objects.filter(id__range =(30,45))
二、前面讲的是包含的查询,下面来看看不包含的查询:
exclude方法为不包含的:
Blog.objects.exclude(id=3)
三、日期类型查询
Blog.objects.filter(create_time__year = 2018)------------->查询年为2018年的内容
Blog.objects.filter(create_time__month=3)----------------->查询月
四、日期查询类型只是筛选了条件,怎么让条件在前端显示呢?django提供了一个dates方法:
Blog.objects.dates('create_time', 'year','DESC')--------------------->分别为:时间字段,查询返回年year,年月month,年月日day,最后一个参数是排序方式ASC正序,DESC倒序。
defblog_with_date(request,year,month):
contenx={}
blogs= Blog.objects.filter(create_time__year = year ,create_time__month =month)
paginator= Paginator(blogs, settings.EACH_OF_BLOGS_NUMBER)#每10篇文章分一页
page_num = request.GET.get('page',1)#GET方法获得url参数?page1 page是参数需要带引号
page_of_blogs = paginator.get_page(page_num)#get_page方法处理用户输入的错误值
current_page_num = page_of_blogs.number#获得当前页
#比较截取到想要的那个数到最小值1时用小的值和1作比较生成一个从小到当前的值
range_page = list(range(max(current_page_num-2,1),curr