【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)
