ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

13 Django-url跳转携带条件

2022-08-15 15:00:25  阅读:125  来源: 互联网

标签: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,跳转
来源: https://www.cnblogs.com/it-lkp/p/16588317.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有