博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之路_保留原搜索页面条件
阅读量:5171 次
发布时间:2019-06-13

本文共 3446 字,大约阅读时间需要 11 分钟。

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

具体介绍如下:

'''实现方式一:    列表页面:        获取当前所有条件,添加到             - 编辑按钮的URL后面            - 添加按钮的URL后面    编辑或添加页面:        - POST提交时,获取原来列表页面传过来的条件        - 拼接URL  /hosts/?原来的条件            list页面:        list_condition = request.GET.urlencode()            {% for item in host_list %}            
  • {
    { item }} 编辑
  • {% 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) 实现方式二:(更安全) list页面: http://127.0.0.1:8000/hosts/?page=5&id__gt=4 params = QueryDict(mutable=True) params['_list_filter'] = request.GET.urlencode() list_condition = params.urlencode() {% for item in host_list %}
  • {
    { item }} 编辑
  • {% endfor %} add/edit页面: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')) 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=1        if query_str:            params = QueryDict(mutable=True)            params[self._query_param_key] = query_str            return mark_safe('编辑' %(self.get_change_url(obj.id),params.urlencode(),)) # /stark/app01/userinfo/        return mark_safe('编辑' % (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

    你可能感兴趣的文章
    django orm 数据查询详解
    查看>>
    JarvisOJ Basic 熟悉的声音
    查看>>
    C# list导出Excel(二)
    查看>>
    CAS 单点登录模块学习
    查看>>
    Android应用开发-网络编程①
    查看>>
    input中的name,value以及label中的for
    查看>>
    静态库制作-混编(工程是oc为基础)
    查看>>
    jQuery 显示加载更多
    查看>>
    Confluence 6 系统运行信息中的 JVM 内存使用情况
    查看>>
    Confluence 6 升级以后
    查看>>
    用JS实现版面拖拽效果
    查看>>
    二丶CSS
    查看>>
    《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
    查看>>
    JS一些概念知识及参考链接
    查看>>
    TCP/IP协议原理与应用笔记24:网际协议(IP)之 IP协议的简介
    查看>>
    SAP HANA开发中常见问题- 基于SAP HANA平台的多团队产品研发
    查看>>
    游戏中的心理学(一):认知失调有前提条件
    查看>>
    WHAT I READ FOR DEEP-LEARNING
    查看>>
    【Ruby】Ruby在Windows上的安装
    查看>>
    Objective C 总结(十一):KVC
    查看>>