Django 简单实现分页与搜索功能的示例代码
假设现有需求如下:
需要一个页面分页展示信息,在该页面添加搜索框以提供检索功能。
那么,我们知道,展示信息和检索功能是在同一个页面,也就是共用一个路由。
代码如下:
第一步,写路由:为了清晰,这里只给出主页和展示页面的路由。
urls.py:
fromdjango.urlsimportpath from.importviews fromdjango.conf.urls.staticimportstatic fromdjango.confimportsettings fromdjango.contrib.staticfiles.urlsimportstaticfiles_urlpatterns #fromdjango.contribimportstaticfiles urlpatterns=[ #主页 path('',views.index), #访问他人信息入口,分页展示 path('other/profile',views.request_user), urlpatterns+=static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT) urlpatterns+=staticfiles_urlpatterns()
第二步,写视图:这里做了访问限制,登录才能访问
views.py:
fromdjango.contrib.auth.decoratorsimportlogin_required fromdjango.shortcutsimportrender,redirect fromdjango.httpimportHttpResponseRedirect,HttpResponse fromdjango.contrib.authimportauthenticate,login,logout from.modelsimportUserInfo,Email_Message,Wastes fromdjango.contrib.auth.modelsimportAnonymousUser fromdjango.core.paginatorimportPaginator,EmptyPage,PageNotAnInteger @login_required(login_url='/tologin') defrequest_user(request): #实现搜索 key=request.GET.get('key') all_users=UserInfo.objects.filter(cate="买家").all() userlist=[] #如果前端传入关键字,才会进行检索,否则显示全部买家 ifkey: foruserinall_users: ifkeyinuser.address: userlist.append(user) all_users=userlist ifall_users: paginator=Paginator(all_users,2) page=request.GET.get('page') try: contacts=paginator.page(page) exceptPageNotAnInteger: contacts=paginator.page(1) exceptEmptyPage: contacts=paginator.page(paginator.num_pages) returnrender(request,'Myapp/userlist.html',{'contacts':contacts}) else: info='暂无数据' returnrender(request,'Myapp/userlist.html',{'info':info})
分页的原理是用到了django自带的分页组件
需要注意的是,搜索的关键字传参,用的是GET请求,而不是POST请求
简单来说,就是先判断前端页面是否用搜索框搜索了关键字,如果搜索了,那么这个词会被
key=request.GET.get('key')
赋值给key,然后进行后续判断处理即可。
如果没有,就正常展示我们需要展示的。
分页的原理。
可以去看这个组件的文档介绍。
如果返回的key检索不到结果,返回空数据页,并提醒。
html代码:
{%loadstatic%}Detail
主页 关于我们 每日看价 找个买家