python之路_保留原搜索页面条件

每周学点土壤知识 2018-03-06

保留原搜索条件的总体思路是在展示页面中,获取去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=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 %}
            <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%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,结果是queryset数据类型,默认queryset数据类型不可编辑,但是如(params = QueryDict(mutable=True))设置mutable=True,queryset数据类型将变得可编辑。

相关推荐