Django 简单实现分页与搜索功能的示例代码


Posted in Python onNovember 07, 2019

假设现有需求如下:

需要一个页面分页展示信息,在该页面添加搜索框以提供检索功能。

那么,我们知道,展示信息和检索功能是在同一个页面,也就是共用一个路由。

代码如下:

第一步,写路由:为了清晰,这里只给出主页和展示页面的路由。

urls.py:

from django.urls import path
from . import views
from django.conf.urls.static import static
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
 
# from django.contrib import staticfiles
 
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:

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth import authenticate, login, logout
from .models import UserInfo, Email_Message, Wastes
from django.contrib.auth.models import AnonymousUser
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
 
@login_required(login_url='/tologin')
def request_user(request):
 # 实现搜索
 key = request.GET.get('key')
 all_users = UserInfo.objects.filter(cate="买家").all()
 userlist = []
 # 如果前端传入关键字,才会进行检索,否则显示全部买家
 if key:
  for user in all_users:
   if key in user.address:
    userlist.append(user)
  all_users = userlist
 if all_users:
  paginator = Paginator(all_users, 2)
  page = request.GET.get('page')
  try:
   contacts = paginator.page(page)
  except PageNotAnInteger:
   contacts = paginator.page(1)
  except EmptyPage:
   contacts = paginator.page(paginator.num_pages)
  return render(request, 'Myapp/userlist.html', {'contacts': contacts})
 else:
  info = '暂无数据'
  return render(request, 'Myapp/userlist.html', {'info': info})

分页的原理是用到了django自带的分页组件

需要注意的是,搜索的关键字传参,用的是GET请求,而不是POST请求

简单来说,就是先判断前端页面是否用搜索框搜索了关键字,如果搜索了,那么这个词会被

key = request.GET.get('key')

赋值给key,然后进行后续判断处理即可。

如果没有,就正常展示我们需要展示的。

分页的原理。

可以去看这个组件的文档介绍。

如果返回的key检索不到结果,返回空数据页,并提醒。

html代码:

{% load static %}
<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]-->
<!--[if IE 7 ]><html class="ie ie7" lang="en"> <![endif]-->
<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!-->
<html lang="en"> <!--<![endif]-->
<head>
 
 <!-- favicon.ico
 ================================================== -->
 <link rel='shortcut icon' href="{% static 'Myapp/img/favicon.con' %}" rel="external nofollow" type="image/x-icon"/>
 
 <!-- Basic Page Needs
 ================================================== -->
 <meta charset="utf-8">
 <title>Detail</title>
 <meta name="description" content="">
 <meta name="author" content="">
 
 <!-- Mobile Specific Metas
	================================================== -->
 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
 
 <!-- CSS
	================================================== -->
 <link rel="stylesheet" href="{% static 'Myapp/css/zerogrid.css' %}" rel="external nofollow" >
 <link rel="stylesheet" href="{% static 'Myapp/css/style.css' %}" rel="external nofollow" >
 <link rel="stylesheet" href="{% static 'Myapp/css/lightbox.css' %}" rel="external nofollow" >
 
 <!-- Custom Fonts -->
 <link href="{% static 'Myapp/assets/css/font-awesome.min.css' %}" rel="external nofollow" rel="stylesheet" type="text/css">
 
 
 <link rel="stylesheet" href="{% static 'Myapp/css/menu.css' %}" rel="external nofollow" >
 <link rel="stylesheet" href="{% static 'Myapp/assets/css/bootstrap.min.css' %}" rel="external nofollow" >
 <script src="{% static 'Myapp/js/jquery1111.min.js' %}" type="text/javascript"></script>
 <script src="{% static 'Myapp/js/script.js' %}"></script>
 
 <!--[if lt IE 8]>
  <div style=' clear: both; text-align:center; position: relative;'>
   <a href="http://windows.microsoft.com/en-US/internet-explorer/Items/ie/home?ocid=ie6_countdown_bannercode" rel="external nofollow" >
   <img src="http://storage.ie6countdown.com/assets/100/images/banners/warning_bar_0000_us.jpg" border="0" height="42" width="820" alt="You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today." />
  </a>
  </div>
 <![endif]-->
 <!--[if lt IE 9]>
		<script src="js/html5.js"></script>
		<script src="js/css3-mediaqueries.js"></script>
	<![endif]-->
 
</head>
 
<body>
<div class="wrap-body">
 
 <!--////////////////////////////////////Header-->
 <header class="zerogrid">
  <div class="logo"><img src="{% static 'Myapp/img/logo.png' %}" alt=""/></div>
  <div id='cssmenu' class="align-center">
   <ul>
    <li><a href='http://127.0.0.1:8000/'><span>主页</span></a></li>
    <li><a href='http://127.0.0.1:8000/about'><span>关于我们</span></a></li>
    <li><a href='http://127.0.0.1:8000/show_detail'><span>每日看价</span></a></li>
    <li><a href='http://127.0.0.1:8000/other/profile'><span>找个买家</span></a></li>
    <li class='last'><a href='http://127.0.0.1:8000/contact'><span>联系我们</span></a></li>
   </ul>
  </div>
  <form style="float: right">
   {% csrf_token %}
   <label>
    <div class="form-group">
     <input type="search" class="form-control" name="key" placeholder="您可输入所在城市以检索买家">
    </div>
   </label>
   <input class="btn btn-default" type="submit" value="搜索">
  </form>
 </header>
 
 <!--////////////////////////////////////Container-->
 <div style="text-align: center">
  <table style="float: contour; margin:0 auto;text-align: center; width: 800px;" class="table table-bordered">
   <tr style="text-align: center" class="success">
    <td>昵称</td>
    <td>地址</td>
    <td>最近活跃</td>
   </tr>
   {% for u in contacts %}
    <tr class="info">
     <td><a
       href="http://127.0.0.1:8000/other/profile/{{ u.username }}" rel="external nofollow" >{{ u.username }}</a>
     </td>
     <td>{{ u.address }}</td>
     <td>{{ u.last_login }}</td>
    </tr>
   {% endfor %}
  </table>
 </div>
 
 
 <div class="navigation">
  <ul>
   {% for pg in contacts.paginator.page_range %}
    {% if contacts.number == pg %}
     <li class="active"><a href="?page={{ pg }}" rel="external nofollow" rel="external nofollow" >{{ pg }}</a></li>
    {% else %}
     <li><a href="?page={{ pg }}" rel="external nofollow" rel="external nofollow" >{{ pg }}</a></li>
    {% endif %}
   {% endfor %}
 
   {% if contacts.has_next %}
    <li><a href="?page={{ contacts.next_page_number }}" rel="external nofollow" >下一页</a></li>
   {% endif %}
  </ul>
 </div>
 <!--////////////////////////////////////Footer-->
 
</div>
{% if info %}
 <script>
  window.alert('{{ info }}');
 </script>
{% endif %}
</body>
</html>

效果:

主页主要功能部分:

Django 简单实现分页与搜索功能的示例代码

信息页分页与搜索:搜索框和分页都是存在的,目前是第一页:http://127.0.0.1:8000/other/profile

Django 简单实现分页与搜索功能的示例代码

第二页:http://127.0.0.1:8000/other/profile?page=2

Django 简单实现分页与搜索功能的示例代码

搜索测试:

Django 简单实现分页与搜索功能的示例代码

Django 简单实现分页与搜索功能的示例代码

搜索无效信息测试:

Django 简单实现分页与搜索功能的示例代码

Django 简单实现分页与搜索功能的示例代码

Django 简单实现分页与搜索功能的示例代码

算是比较完整了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
爬山算法简介和Python实现实例
Apr 26 Python
Python基于回溯法子集树模板实现8皇后问题
Sep 01 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
PyCharm设置护眼背景色的方法
Oct 29 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
Pandas之排序函数sort_values()的实现
Jul 09 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
PyInstaller的安装和使用的详细步骤
Jun 02 Python
python 如何做一个识别率百分百的OCR
May 29 Python
Python中异常处理用法
Nov 27 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 #Python
Django框架ORM数据库操作实例详解
Nov 07 #Python
Python程序暂停的正常处理方法
Nov 07 #Python
浅析python redis的连接及相关操作
Nov 07 #Python
大家都说好用的Python命令行库click的使用
Nov 07 #Python
flask 实现token机制的示例代码
Nov 07 #Python
python3反转字符串的3种方法(小结)
Nov 07 #Python
You might like
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
php实现URL加密解密的方法
2016/11/17 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
php提取微信账单的有效信息
2018/10/01 PHP
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
javascript设计模式之迭代器模式
2020/01/30 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
python实现探测socket和web服务示例
2014/03/28 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
python找出完数的方法
2018/11/12 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
中文系学生自荐信范文
2013/11/13 职场文书
初中生学习生活的自我评价
2013/11/20 职场文书
入团者的自我评价分享
2013/12/02 职场文书
班组长竞聘书
2014/03/31 职场文书
刑事代理授权委托书
2014/09/17 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
搬迁通知
2015/04/20 职场文书
golang内置函数len的小技巧
2021/07/25 Golang