• 重定向时,保留原来的过滤条件


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

    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)
    复制代码
  • 相关阅读:
    win7共享文件
    Linux之samba服务
    Linux之Apache服务
    Linux之ssh服务
    Linux基础入门之管理linux软件(rpm/yum)
    Linux基础入门之文件管理类命令
    PHP ssh链接sftp上传下载
    Black Hat Python之#2:TCP代理
    Black Hat Python之#1:制作简单的nc工具
    使用python的socket模块进行网络编程
  • 原文地址:https://www.cnblogs.com/aizhinong/p/12782946.html
Copyright © 2020-2023  润新知