博客
关于我
强烈建议你试试无所不能的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

    你可能感兴趣的文章
    微信公众平台开发实战Java版之如何网页授权获取用户基本信息
    查看>>
    一周TDD小结
    查看>>
    sizeof与strlen的用法
    查看>>
    Linux 下常见目录及其功能
    查看>>
    开源框架中常用的php函数
    查看>>
    nginx 的提升多个小文件访问的性能模块
    查看>>
    set&map
    查看>>
    集合类总结
    查看>>
    4.AE中的缩放,书签
    查看>>
    1.开发准备
    查看>>
    centos su命令
    查看>>
    CLR:基元类型、引用类型和值类型
    查看>>
    dubbo序列化hibernate.LazyInitializationException could not initialize proxy - no Session懒加载异常的解决...
    查看>>
    jQuery中的事件绑定的几种方式
    查看>>
    泥塑课
    查看>>
    setImageBitmap和setImageResource
    查看>>
    springMVC4 注解配置实例
    查看>>
    单片机编程
    查看>>
    Filter in Servlet
    查看>>
    Linux--SquashFS
    查看>>