首先需要知道的一个知识点:

1、request.GET是一个QueryDict类型的,要想取出?后面的结构就用request.GET.urlencode()

2、request.GET默认是不可修改的,需要把params = QueryDict(mutable=True) ,mutable这个参数设置成True

这样就可以修改了。就可以设置值了。

print(type(request.GET))  #<class 'django.http.request.QueryDict'>
from django.http import QueryDict

二、编辑后保留原URl搜索条件

实现方式一:

在列表页面:
获取当前所有条件,添加到
- 编辑按钮的URL后面
- 添加按钮的URL后面
编辑或添加页面:
- POST提交时,获取原来列表页面传过来的条件
- 拼接URL /hosts/?原来的条件 list页面:
views.py list_condition = request.GET.urlencode() #获取当前所有条件
host.html {% for item in host_list %}
<li>{{ item }} <a href="/edit/54/?{{ list_condition }}">编辑</a></li>
{% endfor %} add/edit页面:http://127.0.0.1:8000/edit/10/?page=5&id__gt=4
def edit_host(request,pk):
if request.method == "GET":
return render(request,'edit_host.html')
else:
# 修改成功 /hosts/?page=5&id__gt=4
url = "/hosts/?%s" %(request.GET.urlencode())
return redirect(url)

方式一的不足:
url上可能会有自己的参数,还有列表页面传进来的参数。所以我们要是自己用自己的
要把他们区分开来:那些是编辑页面的参数,那些事列表页面的参数。那么怎么区分呢?
借鉴django源码,吧他们打包成一个字符串,假设叫_list_filter=page=15$id_gt=11$p=666
目标:吧原来的参数打包成一个值,赋值给字典的key
这就引进了第二种方式

实现方式二:

list页面:url格式 http://127.0.0.1:8000/hosts/?page=5&id__gt=4
  views.py
         def host(request):
     params = QueryDict(mutable=True) #创建对象,
     params['_list_filter'] = request.GET.urlencode() #设置值 :吧当前url作为值赋值给_list_filter
     list_condition = params.urlencode() host.html
{% for item in host_list %}
<li>{{ item }} <a href="/edit/54/?{{ list_condition }}">编辑</a></li>
{% endfor %}
add/edit页面 url格式http://127.0.0.1:8000/edit/54/?_list_filter=page%3D5%26id__gt%3D4 def edit_host(request,pk):
if request.method == "GET":
return render(request,'edit_host.html')
else:
# 修改成功 /hosts/?page=5&id__gt=4
url = "/hosts/?%s" %(request.GET.get('_list_filter')) #获取_list_filter值
return redirect(url)

编辑后保留原URl搜索条件的更多相关文章

  1. 4、flask之分页插件的使用、添加后保留原url搜索条件、单例模式

    本篇导航: flask实现分页 添加后保留原url搜索条件 单例模式 一.flask实现分页 1.django项目中写过的分页组件 from urllib.parse import urlencode ...

  2. flask之分页插件的使用、添加后保留原url搜索条件、单例模式

    本篇导航: flask实现分页 添加后保留原url搜索条件 单例模式 一.flask实现分页 1.django项目中写过的分页组件 from urllib.parse import urlencode ...

  3. 用flask实现的添加后保留原url搜索条件

    1.具体实现 #!usr/bin/env python # -*- coding:utf-8 -*- from flask import Flask,render_template,request,r ...

  4. easyui tree 编辑后保留原先状态

    $(function () { var selected = $('#depttree').tree('getSelected'); $('#depttree').tree({ checkbox: f ...

  5. python 全栈开发,Day115(urlencode,批量操作,快速搜索,保留原搜索条件,自定义分页,拆分代码)

    今日内容前戏 静态字段和字段 先来看下面一段代码 class Foo: x = 1 # 类变量.静态字段.静态属性 def __init__(self): y = 6 # 实例变量.字段.对象属性 # ...

  6. thinkphp5 实现搜索分页能下一页保留搜索条件

    正常情况下: 搜索后分页了,点击第二页,进入页面之前的搜索条件没有了. 如代码 $keywords=$this->request->param('keywords'); $this-> ...

  7. 搜索条件两个时间,通过php数组排序,保证select语句between时间 前小后大

    //搜索条件两个时间,通过数组排序,保证select语句between时间 前小后大 $sort_array=[$_POST['clockDate1'],$_POST['clockDate2']]; ...

  8. post表单翻页保存搜索条件

    问题:搜索条件下的数据,进行翻页行为后,搜索条件丢失 1.搜索表单 2.翻页 解决:既然点击页面跳转的a标签使用的方法是GET,而点击“搜索”按钮使用的方法是POST,那么可以让点击a标签实际上就是提 ...

  9. jQuery DataTables添加自定义多个搜索条件

    效果如下: 一.在前台页面定义输入搜索条件的文本框 <div class="ibox-tools"> <span>年度</span> @Html ...

随机推荐

  1. MacOS安装kafka可视化工具Kafka Tool

    1 下载地址 http://www.kafkatool.com/download.html 2 下载dmg包,选择对应版本,我的kafka是2.1的版本,所以选择了Kafka Tool 2.0.4 3 ...

  2. 浅谈linux线程切换问题

    http://www.jb51.net/article/102059.htm 处理器总处于以下状态中的一种: 1.内核态,运行于进程上下文,内核代表进程运行于内核空间 2.内核态,运行于中断上下文,内 ...

  3. Mysql-5.7.20-winx64绿色版安装步骤

    Mysql-5.7.20-winx64绿色版安装步骤 1. 下载 mysql-5.7.20-winx64.zip 2.解压 解压到指定目录: C:\AppDate\mysql-5.7.20-winx6 ...

  4. BFS与DFS算法解析

    1)前言 和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图种所有顶点进行访问,且仅访问一次. 但是图的遍历相对树的遍历更为复杂,因为图中任意顶点都能与其他顶点相邻,所以在图的遍历中必须 ...

  5. BigDecimal实现末尾去掉无用0

    BigDecimal 原生提供了 stripTrailingZeros 方法可以实现去掉末尾的 0,然后使用 toPlainString 可以输出数值,注意这里如果使用 toString()  会变成 ...

  6. Thymeleaf--:fragment

    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" ...

  7. 列举两种不同类型的Java标识注释,并解释它们之间的区别。

    列举两种不同类型的Java标识注释,并解释它们之间的区别.

  8. openstack Q版部署-----Cinder云存储服务(10)

    一.cinder介绍 一般 cinder-api 和 cinder-scheduler 安装在控制节点上, cinder-volume 安装在存储节点上. 二.数据库配置 # 在任意控制节点创建数据库 ...

  9. JS调用函数时候加括号与只写函数名字的区别 fn与fn()的区别

    经常见插件里面函数调用的时候只写个函数名字,不写函数参数,甚至连括号也不写,比如说: <!DOCTYPE html> <html> <head> <meta ...

  10. LeetCode Two Add Two Numbers (JAVA)

    问题简介:输入两个数字链表,输出求和后的链表(链表由数字位数倒序组成) 问题详解: 给定两个非空链表,表示两个非负整数. 数字以相反的顺序存储,每个节点包含一位数字.对两个整数作求和运算,将结果倒序作 ...