Django中url与path及re_path的区别说明
Django中url与path及re_path区别
初学者一般不能分清两者的区别,所这简单介绍下两者.首先,url是Django 1.x中的写法,p在Django2.1中,开始舍弃django1.x中的url写法。
在django2.x中,描写url配置的有两个函数path和re_path.re_path()函数可以看做是django 1.x中得url函数,即可以在路径中使用正则.
一.path和url的区别:
django.urls path django.conf.urls url
path与url是两个不同的模块,效果都是响应返回页面, path调用的是python第三方模块或框架,而url则是自定义的模块,如Views下的def函数对应你url中的参数值.
例如:
url(r'^login',views.login), def login(request): return render(request,'login.html')
1、url
在settings.py文件中有一个ROOT_URLCONF设置,设置的是在访问网址时通过哪一个url文件去匹配所请求的网址
url参数
url或者re_path要复杂一些 (r'^blog/(?P[0-9]{4})/′)首先需要开始符和结尾符 ') 首先需要开始符^和结尾符 ′)首先需要开始符和结尾符,参数匹配一个 ()就是一个匹配参数,
(?P<匹配的字段名>正则表达式)
进行匹配是不包括get或者post请求方式的参数及域名比如www.qq.com/blog?num=1并不会匹配?后边的字符
可以给request参数设置一个默认值,最常见的分页url,比如
urlpatterns=[ url(r'^page/$',views.page), url(r'^page(?P<num>[0-9]+)$',views.page) ] #views def page(request,num='1'): pass
自定义错误页面关键字handler400=blog.views.page_no_find
#urls.py … handler400=blog.views.page_no_find
2、path
参数的使用方法path(‘blog/str:string/') 简单了很多,就是尖括号,前边是str代表参数的类型,后面代表参数的名称
path参数类型
捕获url中的参数需要用到尖括号<> 指定尖括号中的值类型比如int:astr:link这个转换器还有许多类型比如:
int 匹配0和正整数
str 匹配任何空字符串但不包括/
slug 可理解为注释 匹配任何ascii码包括连接线和下划线
uuid 匹配一个uuid对象(该对象必须包括破折号—,所有字母必须小写)
path 匹配所有的字符串 包括/(意思就是path前边和后边的所有)
3.re_path
如果遇上路径和转换器语法都不足以定义的URL模式,那么就需要使用正则表达式,这时候就需要使用re_path(),而非path()。
举例:传递 数字结尾的参数
re_path(r'(\d+)/$',views.peopleList,name='peopleList'),
二、python3中使用django2,常见设置path问题
1.Django2中使用
在python3中使用django2的时候,在设置urls的时候,会遇到一些坑。这里做一下记录。
系统的urls.py里,在1.X的时候,都是采用的url方式。如下
url(r'^', include("test1.urls")),
在2.0中,它推荐使用的是path模块,所以这里就改写一下。引包
from django.urls import path path('', include("test1.urls")),
注意:
如果要使用正则,则要引入re_path,from django.urls import path, re_path
这里面的正则写法,有点意思,一定要使用()把正则包起来,然后用?P正式表达式 这种形式来表式
2.APP中使用path
1.x里面的写法是
url(r'^page=(\d+)&key=(\w+)$', views.detail, name=”detail”),
现在的写法
re_path('page=(?P<page>\d+)&key=(?P<key>\w+)', views.detail, name="detail"),
这样一对比就能明白了吧,使用的链接是http://127.0.0.1:8000/page=12&key=abc
3.系统的urls.py里的namespace的问题
1.x中写法
url(r'^', include("test1.urls", namespace='test1')),
可是在2.0中你这么写,会报错,说什么app_name的,这个自己可以看一下,怎么解决呢,其实很简单,只要在自己项目urls.py中加上这句就行了.如果不加的话可能报错,
app_name = 'test1'(你的APP名)
注:
使用url也是可以的,为了简便起见,尽量使用符合版本的字段,另外在写路径时应该严格按照语法,比如'^' 和/$就不能缺,不能前面写url,括号里面确按照path的写法,这样很容易出错,到了关键时刻,很难定位问题点,很浪费时间.
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。如有错误或未考虑完全的地方,望不吝赐教。
相关文章
- 这篇文章主要介绍了vue-cli设置publicPath小记,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-14
Django def clean()函数对表单中的数据进行验证操作
这篇文章主要介绍了Django def clean()函数对表单中的数据进行验证操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-09- 这篇文章主要介绍了IDEA如何添加配置文件到classpath中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
- 复制代码 代码如下:$nodes = @$xpath->query("//*[@id='main_pr']/img/@src");$prurl = $nodes->item(0)->nodeValue;...2013-10-04
- 这篇文章主要介绍了C# 如何解析获取Url参数值,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-09-01
- 这篇文章主要介绍了使用JavaScript获取URL中的参数(两种方法)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-11-22
- 这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
- 这篇文章主要介绍了NODE.JS如何根据URL返回指定的图片详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-21
- 这篇文章主要介绍了c#动态改变webservice的url访问地址,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了在Django中使用MQTT的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-10
- XPath构建于XML之上,以表示路径的方式来确定XML中元素位置,事实上并不是太常用,这里我们来简单了解JavaScript操作XPath的一些基本方法...2016-06-12
Nginx反向代理proxy_cache_path directive is not allowed错误解决方法
这篇文章主要介绍了Nginx反向代理proxy_cache_path directive is not allowed错误解决方法,需要的朋友可以参考下...2016-01-27基于xpath选择器、PyQuery、正则表达式的格式清理工具详解
这篇文章主要介绍了基于xpath选择器、PyQuery、正则表达式的格式清理工具,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07C#中GraphicsPath的AddString方法用法实例
这篇文章主要介绍了C#中GraphicsPath的AddString方法用法,实例分析了AddString方法添加字符串的相关使用技巧,需要的朋友可以参考下...2020-06-25- 这篇文章主要介绍了C# URL短地址压缩算法及短网址原理解析,本文重点给出了算法代码,需要的朋友可以参考下...2020-06-25
解决导入django_filters不成功问题No module named 'django_filter'
这篇文章主要介绍了解决导入django_filters不成功问题No module named 'django_filter',具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-15- 本文主要介绍了Django项目连接MongoDB的三种方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-27
详解如何使用Docker部署Django+MySQL8开发环境
这篇文章主要介绍了详解如何使用Docker部署Django+MySQL8开发环境,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-07-19PHP CURL CURLOPT参数说明(curl_setopt)
CURLOPT_RETURNTRANSFER 选项:curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSEcurl_setopt($ch, CURLOPT_RETURNTRANSFER,0); 或着不使用这个选项:如果成功只...2013-10-04- 这篇文章主要介绍了js获取url页面id,也就是最后的数字文件名,有时候我们需要判断当前页面的id,又不用重新生成页面直接用js获取最后的数字.htm即可...2020-09-25