保留原搜索条件的总体思路是在展示页面中,获取去url中的相关搜索条件参数,将此参数保留存放在页面中如编辑或者删除按钮的链接路径中,实现编辑或者删除后,视图再次获得url之前保存的页面搜索相关参数,与重定向url拼接后 ,即可实现原路返回原页面位置。

具体介绍如下:

'''
实现方式一:列表页面:获取当前所有条件,添加到 - 编辑按钮的URL后面- 添加按钮的URL后面编辑或添加页面:- POST提交时,获取原来列表页面传过来的条件- 拼接URL  /hosts/?原来的条件list页面:list_condition = request.GET.urlencode(){% for item in host_list %}<li>{{ item }} <a href="/edit/{{id}}/?{{ list_condition }}">编辑</a></li>{% endfor %}add/edit页面:http://127.0.0.1:8000/edit/10/?page=5&id__gt=4def edit_host(request,pk):if request.method == "GET":return render(request,'edit_host.html')else:# 修改成功 /hosts/?page=5&id__gt=4url = "/hosts/?%s" %(request.GET.urlencode())return redirect(url)实现方式二:(更安全)list页面: http://127.0.0.1:8000/hosts/?page=5&id__gt=4params = QueryDict(mutable=True)params['_list_filter'] = request.GET.urlencode()list_condition = params.urlencode(){% 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/54/?_list_filter=page%3D5%26id__gt%3D4def edit_host(request,pk):if request.method == "GET":return render(request,'edit_host.html')else:# 修改成功 /hosts/?page=5&id__gt=4url = "/hosts/?%s" %(request.GET.get('_list_filter'))return redirect(url)
'''

  说明:如请求路径为http://127.0.0.1:8000/hosts/?page=5&id__gt=4,request.GET.urlencode()获得请求路径中的整体条件page=5&id__gt=4,request.GET结果是QueryDict数据类型,默认QueryDict数据类型不可编辑,但是如(params = QueryDict(mutable=True))设置mutable=True,QueryDict数据类型将变得可编辑。分如下两种情况:

#1、已有QueryDict设置:
request.GET                                                        #(QueryDict对象)
request.GET._mutable = True#2、新建QueryDict设置:
params = QueryDict(mutable=True)

应用实例:

 渲染页面编辑按钮函数:
  from django.http import QueryDict  def edit(self,obj=None,is_header=False):if is_header:return '编辑'query_str = self.request.GET.urlencode()                                                           # page=2&nid=1if query_str:params = QueryDict(mutable=True)params[self._query_param_key] = query_strreturn mark_safe('<a href="%s?%s">编辑</a>' %(self.get_change_url(obj.id),params.urlencode(),)) # /stark/app01/userinfo/return mark_safe('<a href="%s">编辑</a>' % (self.get_change_url(obj.id),))                          # /stark/app01/userinfo/

  处理编辑页面的视图函数:

    def change_view(self,request,nid,*args,**kwargs):# self.model_class.objects.filter(id=nid)obj = self.model_class.objects.filter(pk=nid).first()if not obj:return redirect(self.get_list_url())model_form_class = self.get_model_form_class()# GET,显示标签+默认值if request.method == 'GET':form = model_form_class(instance=obj)return render(request,'stark/change_view.html',{'form':form})else:form = model_form_class(instance=obj,data=request.POST)if form.is_valid():form.save()list_query_str = request.GET.get(self._query_param_key)list_url = "%s?%s" %(self.get_list_url(),list_query_str,)return redirect(list_url)return render(request, 'stark/change_view.html', {'form': form})

转载于:https://www.cnblogs.com/seven-007/p/8512152.html

python之路_保留原搜索页面条件相关推荐

  1. python之路_自定义属性、json及其他js补充

    一.自定义属性 我们知道,在前端页面渲染的过程中,我们可能会需要用到一些后端传来的参数,这种参数的获取我们一般是通过模板语言渲染得到.但是当这些参数是在js文件中被用到(js代码若是单独以文件形式被引 ...

  2. python之路_面向对象

    1 >>> dict #类型dict就是类dict 2 <class 'dict'> 3 >>> d=dict(name='egon') #实例化 4 ...

  3. python爬虫 爬取淘宝搜索页面商品信息数据

    主要使用的库: requests:爬虫请求并获取源码 re:使用正则表达式提取数据 json:使用JSON提取数据 pandas:使用pandans存储数据 以下是源代码: #!coding=utf- ...

  4. python之路_文件操作解析

    文件操作 一.操作文件三要素 1. 路径    #文件存放的具体位置的路径 2. 编码    #文件打开的的编码格式:utf-8 3. 模式 - rb:以字节的方式只读 obj = open('D:\ ...

  5. python的字符串_百度资讯搜索_python的字符串

    澎湃新闻 8小时前该扩展利用可处理编程语言和自然语言的预训练模型 CodeBERT,实现快速生成 Python 文档字符串的功能. Visual Studio Code(简称 VS Code)是一个由 ...

  6. python招生海报_从原研哉的哲学中学习海报设计

    提及平面设计界的大师,原研哉是其中我最敬仰的一位,我非常喜欢原研哉的设计作品,他的设计既简单却蕴含丰富的情感.每当我们谈及原研哉的设计理念时,总 会谈及到"白"."触知& ...

  7. python批处理代码_【原创源码】【python】python文本文件批处理

    [Python] 纯文本查看 复制代码import os import shutil def text_edit_vhd(filepath): with open(filepath,'r+') as ...

  8. python人脸姿态_(原)人脸姿态识别Fine-Grained Head Pose EstimationWithout Keypoints

    转载请注明出处: 论文: Fine-Grained Head Pose EstimationWithout Keypoints 论文网址: 官方pytorch网址: 说明:该代码是pytorch早期的 ...

  9. python之路_计算机编码及运算符介绍

    1. Pycharm使用 2. 字符串格式化     作用:将数字和字符串相结合 占位符:%s代表字符串,%d代表整数类型 格式: #实例1msg = "我叫%s,年龄是%d,爱好%s&qu ...

  10. python之路_前端基础之Bootstrap 组件

    文档内容参考地址:http://v3.bootcss.com/components/ 一.图标 如下例,Star文本前有一个空格: <button type="button" ...

最新文章

  1. C#生成CHM文件(外篇使用hha.dll)
  2. java php mysql_系统学习javaweb13----MYSQL学习(使用PHP、SQL)1
  3. SQL查询表对应的外键约束
  4. DES/3DES/AES区别
  5. Ajax[Mount]
  6. System.arraycopy 和Arrays.copyOf
  7. ext 从头开始 extjs 控件 触发事件 的几种方式
  8. Android Studio MAT内存分析初探
  9. 安装SAP Business One对软硬件有哪些要求
  10. mysql 已存在数据_MySQL跳过已存在的数据
  11. 蚂蚁金服资深技术专家经国:云原生时代微服务的高可用架构设计
  12. python动态规划算法最大k乘积_C语言使用DP动态规划思想解最大K乘积与乘积最大问题...
  13. 【报告分享】2020年小红书内容生态报告.pdf(附下载链接)
  14. Android:复杂listview条目
  15. sklearn 模型选择和评估
  16. python如何屏幕截图_Python实现屏幕截图的两种方式
  17. 有道云笔记分享_有道云笔记
  18. 西门子低代码项目团队协作方法
  19. html涟漪动画效果,CSS 在按钮上做个涟漪效果(Ripple Animation)
  20. 组学数据上传(五):代谢组学数据

热门文章

  1. matlab 数字基带,基于MATLAB的数字基带传输的 FIR滤波器的设计
  2. weui实现微信网页模板(主页,购物车,分类,后台等等)
  3. 7-7Hadoop学习之常用Linux命令与集群配置
  4. win10 Hyper-V 虚拟机 装 boot2docker
  5. FreeMarker 模板引擎快速入门 与 生成Word文档终极解决方案
  6. Java 枚举(enum)剖析
  7. Location 对象操作 URL 使用详解
  8. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第2节 maven的安装和仓库种类_04maven的安装...
  9. 百度地图电子围栏功能的实现
  10. ZT:Linux上安装JDK,最准确