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
主页 关于我们 每日看价 找个买家