学习笔记,仅供参考,有错必纠

参考自:Django打造大型企业官网;

本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写一下。


url反转

之前我们都是通过url来访问视图函数,有时候我们知道这个视图函数,但是想反转回他的url,这时候就可以通过reverse来实现。

例如,我们在front应用的urls.py中定义路由:

from django.urls import path
from . import viewsapp_name = 'front'urlpatterns = [path('', views.index),path('login/', views.login, name = "signin"),
]

在cms应用的urls.py中定义路由:

app_name = 'cms'urlpatterns = [path('', views.index),path('login/', views.login, name = "signin"),
]

在front应用的views.py模块中定义一个视图函数:

def index(request):username = request.GET.get("username", "")if username:return HttpResponse("front首页")else:login_url = reverse('cms:signin')#利用url的name参数反转得到相应的urlprint("-+"*15)print(login_url)print("-+"*15)return redirect(login_url)

向http://127.0.0.1:8000/front/发起请求后,控制台的输出:

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/cms2/login/
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

如果这个url中需要传递参数,那么可以通过reverse函数中的kwargs来传递参数。

例如,我们在front应用的urls.py中定义路由:

from django.urls import path
from . import viewsapp_name = 'front'urlpatterns = [path('show/<show_id>/', views.show, name = "show"),path('test/', views.test, name = "test"),
]

在views.py模块中我们定义一个视图函数test:

def show(request, show_id):return HttpResponse("ID为:{}".format(show_id))def test(request):username = request.GET.get("username", "")if username: return HttpResponse("测试页面")else:login_url = reverse('front:show', kwargs={"show_id":1})#利用url的name参数反转得到相应的urlprint("-+"*15)print(login_url)print("-+"*15)return redirect(login_url)

向http://127.0.0.1:8000/front/test/发起请求后,控制台的输出:

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/front/show/1/
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

同时,由于django中的reverse函数反转url时,不区分GET请求和POST请求,因此不能在反转的时候添加查询字符串的参数。

如果想要添加查询字符串的参数,只能手动的添加,例如:

login_url = reverse('login') + "?next=/"

Django从理论到实战(part14)--url反转相关推荐

  1. Django从理论到实战(part10)--URL命名与反转

    学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...

  2. Django从理论到实战(part8)--URL中添加参数

    学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...

  3. Django从理论到实战(part7)--关于视图函数与URL映射

    学习笔记,仅供参考 参考自:Django打造大型企业官网:URL映射 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽 ...

  4. Django从理论到实战(part19)--DTL模板语法

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y:官方文档 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在 ...

  5. Django从理论到实战(part15)--自定义path转换器

    学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...

  6. Django从理论到实战(part12)--应用命名空间和实例命名空间

    学习笔记,仅供参考 参考自:Django打造大型企业官网: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的写 ...

  7. Django从理论到实战(part22)--include模板标签

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...

  8. Django从理论到实战(part54)--MEDIA_ROOT和MEDIA_URL

    学习笔记,仅供参考,有错必纠 引用:使用模型来处理上传的文件:Django static静态配置文件 MEDIA_ROOT和MEDIA_URL 变量解释 MEDIA_ROOT:指定用户上传文件的本地路 ...

  9. Django从理论到实战(part50)--使用模型来处理上传的文件

    学习笔记,仅供参考,有错必纠 文章目录 使用模型来处理上传的文件 `MEDIA_ROOT`和`MEDIA_URL` 限制文件的扩展名 使用模型来处理上传的文件 在定义模型的时候,我们可以给存储文件的字 ...

最新文章

  1. socket与TcpListener/TcpClient/UdpClient 的区别及联系
  2. ORM武器:NHibernate(三)五个步骤+简单对象CRUD+HQL
  3. html如何让列表呈直线排列,html – 列表分成多列
  4. 近期活动盘点:工业大数据讲座、大数据自杀风险感知讲座、数据法学研讨会、海外学者短期讲学(12.3-12.13)
  5. 软件需求分析--三步走
  6. Linux基础之grep攻坚
  7. iOS物理碰撞、唱吧音频处理、仿淘宝联动效果等源码
  8. hdu 2112 HDU Today 最短路(Dijkstra算法)
  9. <马哲>劳动价值论的理论及实践意义
  10. cuda、cudnn相关问题链接
  11. 第十二篇 Android 系统电话管理机制一--工厂模式和代理模式
  12. oracle分页的三种方式,oracle 使用rownum的三种分页方式
  13. Asp.net自定义控件开发任我行(7)-注册自定义事件
  14. 如何用计算机解一元三次方程,利用Excel电子表格解一元三次方程
  15. 超级HOOK技术无需分析基址
  16. grads 相关系数_GrADS实习报告6
  17. 我来告诉你,一个草根程序员如何进入BAT
  18. 2021爱智先行者—人体存在感传感器
  19. 突破技术限制,实现Web端静默打印
  20. 基于Java+SpringBoot+vue实现图书借阅和销售商城一体化系统

热门文章

  1. ubuntu16.04下面使用graphviz
  2. Linux下多显卡选择绘制实验记录
  3. for循环的break和continue
  4. 1623: 街道路径条数
  5. Xcode的SVN提示The request timed out.的解决方案
  6. C#/Net代码精简优化技巧(1)
  7. Linux下PortSentry的配置
  8. 让你一目了然的ip划分!
  9. 接口隔离原则——面向对象设计原则
  10. Oracle基于布尔的盲注总结