首页 > 其他分享 >13 Django-url跳转携带条件

13 Django-url跳转携带条件

时间:2022-08-15 15:00:45浏览次数:56  
标签:13 return form url request param filter 跳转

在生成URL时,需要读取当前URL中的参数并构造URL。例如:

  • 当前URL

    http://127.0.0.1:8000/customer/list/?keyword=xinchen&page=8
    
  • 构造编辑页面URL

    http://127.0.0.1:8000/customer/edit/1/?_filter=keyword%3Dxinchen%26page%3D8
    
    param = request.GET.urlencode() # 获取?后面的值
    
    new_query_dict = QueryDict(mutable=True)  # 创建一个对象,设置可修改
    new_query_dict['_filter'] = param
    
    new_query_dict.urlencode()  # 内部自动实现转义
    
  • 跳转回来时

    http://127.0.0.1:8000/customer/list/?keyword=xinchen&page=8
    
    def policy_edit(request, pk):
        ...
        base_url = reverse(name, args=args, kwargs=kwargs)
        param_url = request.GET.get('_filter')
        url = "{}?{}".format(base_url,param_url)
        return redirect(url)
    

实操分享:

permission.py
@register.simple_tag()
def edit_permission(request, name, *args, **kwargs):
    # 3.判断是否具有权限
    # 4.无权限,返回空
    if not check_permission(request, name):
        return ""

    # 5.有权限,通过"name"反向生成url
    url = reverse(name, args=args, kwargs=kwargs)

    # 根据当前用户请求获取GET参数
    param = request.GET.urlencode()  # name=1&age=3
    if param:
        new_query_dict = QueryDict(mutable=True)  # 创建一个对象,设置可修改
        new_query_dict['_filter'] = param  # <QueryDict: {'_filter': ['name=1&age=3']}>
        filter_string = new_query_dict.urlencode()

        tpl = """<a href="{}?{}" class="btn btn-primary btn-xs">编辑</a>""".format(url, filter_string)
        return mark_safe(tpl)

    tpl = """<a href="{}" class="btn btn-primary btn-xs">编辑</a>""".format(url)
    return mark_safe(tpl)
customer.py
def customer_edit(request, pk):
    instance = models.Customer.objects.filter(id=pk, active=1).first()

    if request.method == "GET":
        form = CustomerEditModelForm(request, instance=instance)
        return render(request, 'form2.html', {'form': form})

    form = CustomerEditModelForm(request, instance=instance, data=request.POST)
    if not form.is_valid():
        return render(request, 'form2.html', {'form': form})

    form.save()

    filter_string = request.GET.get('_filter')
    if not filter_string:
        return redirect('/customer/list/')
    return redirect('/customer/list/?{}'.format(filter_string))

标签:13,return,form,url,request,param,filter,跳转
From: https://www.cnblogs.com/it-lkp/p/16588317.html

相关文章

  • windows系统下执行es的curl
    windows系统下执行curl:注意:windows下不能用单引号,必须用双引号,英文双引号,双引号!!!查看es状态curlhttp://localhost:9200/_cat/health查看特定索引curl"http://localhost......
  • Codeforces Round #813 (Div. 2)
    CodeforcesRound#813(Div.2) 1712A-WonderfulPermutation题意: #include<bits/stdc++.h>usingnamespacestd;constintmaxn=120;int......
  • [NOIP2013 提高组] 积木大赛
    试题分析:题目虽然可以用递归,但最优方法还是用贪心,每次输入进去,如果比前一个数小,那么减前一个数时就可以顺便把他减掉,如果大于则还得自己减。代码: ......
  • 8.8~8.13总结
    8.9wave【题目描述】海浪分为前浪和后浪,分别用数字0和数字1表示。现在给定一天中n个时段的海浪序列,第i个序列包含$m_i$个海浪。全天海浪序列是n个时段的......
  • Codeforces Round #813 (Div. 2) (C~D)
    C.SortZero最开始写了个n2的TLE了以后不知道咋优化只好观察性质发现我们要维护一个后缀很多人说要维护前缀其实也就少跑了60ms我们维护一个mp[]记录的是哪个数不......
  • Codeforces Round #813 (Div. 2)A-D
    CodeforcesRound#813(Div.2)A-D过程本场A,B快速签到,但C卡了一下,D做法一开始直接把小的变大,然后发现假了,把自己hack了,随后想到了三分寻找最合适的变连续的一串从小到大......
  • P5131 荷取融合——计数dp,组合计数
    本题是一个计数类的问题,其中需要有一些优化。简单思路从题面和数据范围,可以猜测算法时间复杂度大概是\(O(nk)\),所以不难想到用动态规划:设\(f(i,j)\)为前\(i\)个数中选\(......
  • 浏览器输入 URL,按下回车会经历什么?
    浏览器输入URL,按下回车会经历什么?浏览器去问DNS服务器,这个域名所对应的IP地址拿到之后,根据此IP,加上80端口,与该服务器建立TCP连接浏览器发出读取请求,服务器将......
  • NC13230 合并回文子串
    题目链接题目题目描述输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变。如"abc"和"xyz"可以被组合成"axbycz"或"abxcyz"等。我们定义字符串的价值为......
  • P8245 [COCI2013-2014#3] PAROVI & ZLOJ 练习62 D
    writtenon2022-08-09一道有趣的计数题。首先题面中最引人注目的就是两个整数的数据范围。很显然,暴力的思路,枚举所有数,找出每一位上每一种数字的个数这种方法是不可行......