介绍

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

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

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

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

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

前端页面反向生成url

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

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

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

  1. def memory_reverse(request, name, *args, **kwargs):
  2. """
  3. 反向生成带有原搜索条件的url
  4. :param request:
  5. :param name: 带有namespace的url别名, 如:"rbac:menu_list"
  6. :param args:
  7. :param kwargs:
  8. :return:
  9. """
  10. url = reverse(name, args=args, kwargs=kwargs)
  11. origin_params = request.GET.get("_filter")
  12. if origin_params:
  13. url = "%s?%s" % (url, origin_params)
  14. return url
  1. def menu_add(request):
  2. ...
  3. form = MenuModelForm(data=request.POST)
  4. if form.is_valid():
  5. form.save()
  6. return redirect(memory_reverse(request, "rbac:menu_list"))
  7. 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. 持续集成学习6 jenkins自动化代码构建

    一.实验目标 二.配置 1.配置mvn构建 [root@node1 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3 ...

  2. Java 导出数据库表信息生成Word文档

    一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看看生成的word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导 ...

  3. 使用memset初始化int数组

    memset()是一个来自于string库的函数,正规用法是初始化char类型的数组.因为char类型只占1个字节,memset按字节赋值后,会将char类型数组的所有元素变为你指定的值.但是4字节的 ...

  4. 【模板】prufer序列

    如何构造一个prufer序列? 我们给一棵无根树的节点编上号,每次找到一个编号最小的度为1节点,删除它,并输出与它连接的点的编号,直到只剩下两个节点. 这样,我们就构造出来了一个prufer序列. 通 ...

  5. iOS和macOS上的Message-ID和Mail.app深度链接

    如何在iOS上通过电子邮件进行无缝的“无密码”身份验证. Apple平台上的邮件和日历集成 在macOS和iOS上查看电子邮件时,邮件会在[检测到的日期和时间]下划线 .您可以与他们互动以创建新的日历 ...

  6. Numpy 中的比较和 Fancy Indexing

    # 导包 import numpy as np Fancy Indexing 应用在一维数组 x = np.arange(16) x[3] x[3:9] # array([3, 4, 5, 6, 7, ...

  7. [考试反思]1011csp-s模拟测试68:守恒

    在RP守恒定律的持续作用下, 不出所料,这场稍炸 还有10分钟就是下一场了,但愿继续守恒? 改题太慢了,连写博的时间都没有了 然而最后还是在吃饭前彻彻底底改出来了 的确是个菜鸡 所以今天的题解只能先咕 ...

  8. js中关于执行的顺序及变量存放方式的一点记录

    Markdown在线编辑器 - www.MdEditor.com 1 首先关于数据类型,有基本数据类型,和引用数据类型 基本数据类型有:number,string,boolean等:引用数据类型一般指 ...

  9. 考试T1护花

    传送门 这题的提议似乎有什么问题,只要约翰选好了要抓那头牛,他就不会吃草了,站在原地傻等? 这题就是贪心,但在用cmp中比较单位时间吃草数量时,要用double型,不然可能会有点一样... 还有就是主 ...

  10. 大数据之路week01--自学之集合_2(List)

    在学习过了Collection之后,接下来我们将去学习List, 先看API文档: List集合的特有功能:(没有列出Collection也有的功能) A:添加功能  add(int index, E ...