介绍

django自带反向解析生成URL的功能,目的是避免硬编码,较少代码维护的代价。

前端页面使用模板语法,如:{% url "rbac: request menu_list" %}

后台视图函数使用django组件函数:reverse()

但是,当需要在页面跳转时携带浏览器搜索框中的GET请求的参数时(如,'?page=1'),上述方法就难以满足需求,需要自定制反向生成路由的方法。

这里可以考虑使用django的simple_tag并利用组件QueryDict

前端页面反向生成url

前端页面扩展原模板语法的反向解析功能

  • 利用simple_tag前端页面对反向解析url做出来
  • 使用QueryDict打包当前URL中的参数,会自动转译
@register.filter
def memory_url(request, name, *args, **kwargs):
    """
    生成带有原搜索条件的url
    :param request:
    :param name: 带namespace的url别名
    :return:
    """
    original_url = reverse(name, args=args, kwargs=kwargs)
    # 当前url中无搜索条件
    if not request.GET:
        return original_url
    query_dict = QueryDict(mutable=True)
    query_dict["_filter"] = request.GET.urlencode()
    return "%s?%s" % (original_url, query_dict.urlencode())
 <a href="{% memory_url request "rbac:menu_add" %}">新建</a>
后台视图函数反向生成url

后台视图中扩展Django自带的reverse()反向解析功能

def memory_reverse(request, name, *args, **kwargs):
    """
    反向生成带有原搜索条件的url
    :param request:
    :param name: 带有namespace的url别名, 如:"rbac:menu_list"
    :param args:
    :param kwargs:
    :return:
    """
    url = reverse(name, args=args, kwargs=kwargs)
    origin_params = request.GET.get("_filter")
    if origin_params:
        url = "%s?%s" % (url, origin_params)

    return url
def menu_add(request):
    ...
    form = MenuModelForm(data=request.POST)
    if form.is_valid():
        form.save()
        return redirect(memory_reverse(request, "rbac:menu_list"))
    return render(request, "rbac/change.html", {"form": form})

自定制页面跳转时携带原搜索参数的URL的更多相关文章

  1. 微信小程序:页面跳转时传递数据到另一个页面

    一.功能描述 页面跳转时,同时把当前页面的数据传递给跳转的目标页面,并在跳转后的目标页面进行展示 二.功能实现 1. 代码实现 test1页面 // pages/test1/test1.js Page ...

  2. 由前端登录验证,页面跳转,携带headers token引发的思考和尝试

    目录 1 前言 2 我的实现方式与存在的问题 3 我想到的解决方案 3.1 前端跳转时携带headers{'token': token} 不就行了(经验证不可行) 3.2 前端跳转封装请求,携带hea ...

  3. Spring MVC 页面跳转时传递参数

    页面仍然使用 JSP,在跳转时如果想传递参数则需要用到类 RedirectAttributes. 首先看看如何打开一个普通页面: // 登录页面(每个页面都要独立的 Action 来支持其呈现) @R ...

  4. 页面跳转时,url 传大数据的参数不全的问题+序列化对象

    1.页面跳转时,url 传大数据的参数不全的问题 //传参: url: '/pages/testOfPhysical/shareEvaluation?detailInfo=' +encodeURICo ...

  5. 使用iframe框架后的页面跳转时目标页面变为iframe的子页面的问题

    <frameset rows="4,200,10,*,120" cols="*" framespacing="0" framebord ...

  6. 页面跳转时中间参数保存(memcache/cookie)

    2014年1月19日 17:30:27 我这篇文章就说了一句话:用cookie保存页面间跳转时的参数 情景: 客服在后台操作的时候,经常从列表页进入到编辑页,编辑完信息后,还要自动返回之前的列表页 问 ...

  7. vue路由守卫+cookie实现页面跳转时验证用户是否登录----(二)设置路由守卫

    上一篇我们已经封装好了cookie方法,登录成功之后也可以吧用户信息存到cookie中,接下来需要在router/index.js中引入一下cookie.js文件 然后继续添加以下代码 /* * be ...

  8. 微信小程序页面-页面跳转失败WAService.js:3 navigateTo:fail url not in app.json

    微信小程序新建页面的要素一是新建的文件名称和其子文件的名称最好一致,不然容易出问题,在小程序页面跳转中如果出现WAService.js:3 navigateTo:fail url not in app ...

  9. 【转】iframe页面跳转时,导致父页面滚动!该怎么解决?

    HTML code <body> <form id="form1" runat="server"> <iframe id=&quo ...

随机推荐

  1. [springboot 开发单体web shop] 4. Swagger生成Javadoc

    Swagger生成JavaDoc 在日常的工作中,特别是现在前后端分离模式之下,接口的提供造成了我们前后端开发人员的沟通 成本大量提升,因为沟通不到位,不及时而造成的[撕币]事件都成了日常工作.特别是 ...

  2. PyQt图形化布局

    安装PyQt第三方库 pip install PyQt5 安装Qt Designer(Qt的布局工具) pip install PyQt5-tools PyChram设置Qt工具 配置Qt Desig ...

  3. CSPS_101

    T1 众所周知,只要在任意三个方向上有连续五颗棋子,游戏即结束. T2 又是最短路优化dp啦. T3 神奇的期望dp.还没改出来. 改出来啦!

  4. NOIP模拟 17

    这次.. 考场刚了T1T2两题的正解 然后T2A了,T1被毒瘤卡常 让skyh得了rank1,QMQ 话说这次考试体(r)验(p)极(yong)佳(jin) 也许是昨晚没玩狼人杀睡的比较好?(现场%苗 ...

  5. 程序员学点xx 之 Redis

    程序员学点xx 之 Redis 概述 其实程序员也要和操作系统打交道, 比如最常见的,部署自己电脑上的开发环境. 当然有时某些牛人, 觉得运维或基础部门的同事不够给力, 亲自上手部署服务器或线上环境, ...

  6. Java序列化与反序列化三连问:是什么?为什么要?如何做?

    Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象 ...

  7. 使用Typescript重构axios(二十五)——文件上传下载进度监控

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  8. go xml 序列化

    /** 序列化 */ package main import ( "encoding/xml" "fmt" ) // Person 结构 type Person ...

  9. GPIO硬件资源的申请,内核空间和用户空间的数据交换,ioctl(.....),设备文件的自动创建

    1.通过GPIO库函数控制LED   open("/dev/myleds",...)       close(fd)   ----------------------------- ...

  10. [WPF] Caliburn Micro学习二 Infrastructure

    Caliburn Micro学习一 Installation http://blog.csdn.net/alvachien/article/details/12985415 Step 1. 无论是通过 ...