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中的yield使用方法
Feb 11 Python
Python连接Redis的基本配置方法
Sep 13 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
Puppeteer使用示例详解
Jun 20 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
python读写csv文件的方法
Aug 13 Python
解决Python列表字符不区分大小写的问题
Dec 19 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
python 数据分析实现长宽格式的转换
May 18 Python
python如何写个俄罗斯方块
Nov 06 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
Feb 20 Python
Python读取文件夹下的所有文件实例代码
Apr 02 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错误、异常处理类
2014/03/21 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
React中嵌套组件与被嵌套组件的通信过程
2018/07/11 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
简单的Apache+FastCGI+Django配置指南
2015/07/22 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
selenium跳过webdriver检测并模拟登录淘宝
2019/06/12 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
大学生求职简历的自我评价
2013/10/21 职场文书
冰淇淋店创业计划书范文
2013/12/27 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL
讲解MySQL增删改操作
2022/05/06 MySQL