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的写法,这样很容易出错,到了关键时刻,很难定位问题点,很浪费时间.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Django 路由控制的实现

    一 Django中路由的作用 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行 典型的例子: from django.urls import path urlpatterns = [ path('articles', views.special), ] articles这个路由对应着视图函数中special这个方法,浏览器输入这个链接,就

  • Django中多种重定向方法使用详解

    前言 本文使用了Django1.8.2 使用场景,例如在表单一中提交数据后,需要返回到另一个指定的页面即可使用重定向方法 一. 使用HttpResponseRedirect fuhao The first argument to the constructor is required – the path to redirect to. This can be a fully qualified URL or an absolute path with no domain."参数可以是绝对路径跟

  • Django中URL的参数传递的实现

    在Django中有非常强大的URL模块,可以按照开发者的想法来制定清晰的URL,同时支持正则表达式.此外,在URL中还可以传递参数. 1. Django处理请求的方式 1) Django通过URLconf模块来进行判断.通常情况下,这就是ROOT_URLCONF配置的价值,但是如果请求携带了一个urlconf的属性(通常被中间件设置),那么这个被携带的urlconf将会替代ROOT_URLCONF的配置. 2) Django会调用Python模块并寻找各种urlpatterns.这是一个属于dj

  • Python Django中的STATIC_URL 设置和使用方式

    使用Django静态设置时,遇到很多问题,经过艰苦的Baidu, stack overflow, Django原档阅读,终于把静态图片给搞出来了.特记录下来. 关键的概念:Django中,静态资源的存放通过设置 STATIC_URL, STATICFILES_DIRS 来设置,一般STATIC_URL设置为:/static/ STATIC_URL='/static/', 这个static 是在Django 具体APP下建立的static目录,用来存放静态资源.而STATICFILES_DIRS一

  • 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

  • 详解django中url路由配置及渲染方式

    今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 创建视图并访问 项目中自带的Python文件中,并没有带有视图,因此我们自己创建一个,通常,我们把视图命名views.py. 然后在views.py中,导入头文件 from django.http import HttpResponse 然后我们在views.py中,写一些Python函数,用来访

  • Django中url的反向查询的方法

    本文介绍了Django中url的反向查询的方法,分享给大家,具体如下: 明确几个概念: 1.application namespace : 正在部署的app的名称,一个app的多个实例应该具有相同的application namespace. 可以通过在URLconf模块(urls.py)中设置 app_name 属性(与urlpatterns属性同级)来指定application namesapce. (在django2.0版本中必须设置 app_name ) 2.instance names

  • django中url映射规则和服务端响应顺序的实现

     1.django搜索路径 使用 import 语句时,Python 所查找的系统目录清单. 查看方式: import sys print sys.path 通常无需关心 Python 搜索路径的设置,Python 和 Django 会在后台自动帮你处理好. 2.url匹配模式 基本结构: '^需要匹配的url字符串$' PS:实际上最终完整的url串是http://根路径:端口号/需要匹配的url字符串 系统自动添加的部分'http://根路径:端口号/' eg:url匹配模式:'^lates

  • 在Django中URL正则表达式匹配的方法

    Django框架中的URL分发采用正则表达式匹配来进行,以下是正则表达式的基本规则: 官方演示代码: from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/

  • 对Django 中request.get和request.post的区别详解

    Django 中request.get和request.post的区别 POST和GET差异: POST和GET是HTTP协议定义的与服务器交互的方法.GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.另外,还有PUT和DELETE方法. POST和GET都可以与服务器完成查,改,增,删操作. GET提交,请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接: POST提交,把提交的数据放置在HTTP包的包体中:因此,GET提交的数据会在地址栏中显示出来,而PO

  • Django中URL视图函数的一些高级概念介绍

    说到关于请求方法的分支,让我们来看一下可以用什么好的方法来实现它. 考虑这个 URLconf/view 设计: # urls.py from django.conf.urls.defaults import * from mysite import views urlpatterns = patterns('', # ... (r'^somepage/$', views.some_page), # ... ) # views.py from django.http import Http404,

  • Django零基础入门之路由path和re_path详解

    目录 urls.py文件中的path和re_path 1.path的基本规则: 2.默认支持的转换器有: 3.re_path正则匹配: Django中实战使用path和re_path 1.urls.py文件: 2.views.py视图函数文件: 3.效果: 假设现在有个需求:   需要通过URL进行参数传递,我们该怎么做呢?     其中有个方法就是本文要讲的内容--path和进阶版的re_path. urls.py文件中的path和re_path 1.path的基本规则: path('test

  • 解决新django中的path不能使用正则表达式的问题

    新版的path 虽然 取代了 之前的url,但是在写路由的时候不能在路由中直接写正则表达式,不然会找不到页面. 解决方法 使用re_path from django.urls import re_path,path urlpatterns = [ path('admin/', admin.site.urls), re_path('edit/(\d+)',views.edit), ] 这样就可以 使用正则了. 以上这篇解决新django中的path不能使用正则表达式的问题就是小编分享给大家的全部内

随机推荐