chan

朝生暮死不足笑 但悲百年不足道

【Django|组件】跳转携带条件组件


说明:在分页及查询等场景下,进行条件搜索查询后,对表单数据进行编辑,编辑完成后,希望携带之前的查询条件返回,而不是直接返回没有参数的数据展示页。

———————————————

封装的函数如下

def filter_reverse(request,url):
    filter_string = request.GET.get('_filter')
    if not filter_string:
        return url
    # 2.url拼接
    return "{}?{}".format(url,filter_string)

视图函数中,如下所示

def policy_edit(request,pk):
    instance = models.PricePolicy.objects.filter(id=pk).first()
    if request.method == 'GET':
        form = PolicyModelForm(instance=instance)
        return render(request,'form_advance.html',{'form':form})

    form = PolicyModelForm(data=request.POST,instance=instance)
    if not form.is_valid():
        return render(request, 'form_advance.html', {'form': form})
    form.save()
    from utils.link import filter_reverse
    return redirect(filter_reverse(request, '/policy/list/'))

视图函数中关于此的核心代码

from utils.link import filter_reverse
    return redirect(filter_reverse(request, '/policy/list/'))

——————————————————–

对应的permission的模板函数中的对应函数应该做类似如下更新

@register.simple_tag
def edit_permission(request,name,*args,**kwargs):

    #3.判断是否具有权限
    if not check_permission(request,name):
        #3.1无权限,则返回空
        return ""
    #3.2有权限,通过‘customer_add’反向生成URL
    url = reverse(name,args=args,kwargs=kwargs)

    #根据当前用户请求获取GET参数
    param = request.GET.urlencode()
    if param:
        new_query_dict = QueryDict(mutable=True)
        new_query_dict['_filter'] = param
        print(new_query_dict)
        filter_string = new_query_dict.urlencode()
        print(new_query_dict.urlencode())

        tpl = """<a href="{}?{}" class="btn btn-primary btn-xs ">编辑</a>""".format(url,filter_string)
        return mark_safe(tpl)
    else:
        tpl = """<a href="{}" class="btn btn-primary btn-xs ">编辑</a>""".format(url)
        return mark_safe(tpl)
评论
还没有评论
    发表评论 说点什么