当前分类:python>>正文

django使用session实现对post查询请求数据的分页

来源:互联网   时间:2022年6月30日   编辑

通常来讲,网站上的数据请求分为get和post请求。

在django框架中,有一个分页器叫Paginator,使用它来分页是非常方便简单的。

在csdn或者简书上随便查查就能找到你想要的教程,但是都是get请求的,比如博客系统的分页什么的。

那么如果是post请求,分页该怎么弄呢?

比如,博客系统,我发送post请求查询关于django的结果,有1000多条,那要分页怎么办呢?

看一下我下面的写的代码你估计就会了。

def search(request):
    num=10
    if request.method=='POST':       
        key=request.POST.get('key')#获取用户从搜索框post过来的关键词
        request.session['key']=key #用session将这个关键词记住
        posts=Posts.objects.filter(Q(title__icontains=key) | Q(content__icontains=key)).all()
            #查询符合条件的文章
        cnt=posts.count()
        paginator=Paginator(posts,num)#进行分页
        postobj=paginator.page(1)#第一页的内容
        context={
            'pageobj':postobj,
            'tagname':'共有{}条关于{}的搜索结果'.format(cnt,key),
            'tags':alltags(),
            
        }
        return render(request,'search.html',context=context)
    if request.method=='GET':
        pg_num = int(request.GET.get('page', 1))
        key=request.session.get('key','')
        if key=='':
            return render(request,'404.html')
        else:
            posts=Posts.objects.filter(Q(title__icontains=key) | Q(content__icontains=key)).all()
            cnt=posts.count()
            paginator=Paginator(posts,num)
            postobj=paginator.page(pg_num)
            context={
                'pageobj':postobj,
                'tagname':'共有{}条关于{}的搜索结果'.format(cnt,key),
                'tags':alltags(),
                
            }
            return render(request,'search.html',context=context)

 

上面是将一个搜索结果进行分页的代码。

num=10,表示10条结果为一页

先判断用户发送的是否为post查询,如果是正常的post查询,就将结果进行分页,并用session记住用户发送的post请求的关键词,但用户翻页的时候,获取页码,再用这个关键词去筛选结果。

如果用户直接访问搜索页,发送的get请求,或者post请求查询内容为空的时候,就会提示404错误,这样避免一些人使用这个搜索框的get和post请求进行捣乱。

这是我的实现思路,大家可以根据自己的需要稍作修改。

[猜你喜欢]

标签: django