郑州网站建设开拓者,企业平台登录,网站设计师是什么专业,WordPress的king免费三 分组命名匹配上面的示例使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图。在更高级的用法中#xff0c;可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。在Python的正则表达式中#xff0c;分组命名…三 分组命名匹配上面的示例使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图。在更高级的用法中可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。在Python的正则表达式中分组命名正则表达式组的语法是(?Ppattern)其中name是组的名称pattern是要匹配的模式。下面是以上URLconf 使用命名组的重写from django.conf.urls import urlfrom . import viewsurlpatterns [url(r^articles/2003/$, views.special_case_2003), #注意正则匹配出来的内容是字符串即便是你在url里面写的是2003数字匹配出来之后也是字符串url(r^articles/(\d{4})/$, views.year_archive),#year_archive(request,2003),小括号为分组有分组那么这个分组得到的用户输入的内容就会作为对应函数的位置参数传进去,别忘了形参要写两个了明白了吗url(r^articles/(?P[0-9]{4})/$, views.year_archive),#某年的(?P[0-9]{4})这是命名参数(正则命名匹配还记得吗)那么函数year_archive(request,year)形参名称必须是year这个名字。而且注意如果你这个正则后面没有写$符号即便是输入了月份路径也会被它拦截下拉因为它的正则也能匹配上url(r^articles/(?P[0-9]{4})/(?P[0-9]{2})/$, views.month_archive),#某年某月的url(r^articles/(?P[0-9]{4})/(?P[0-9]{2})/(?P[0-9]{2})/$, views.article_detail), #某年某月某日的]这个实现与前面的示例完全相同只有一个细微的差别捕获的值作为关键字参数而不是位置参数传递给视图函数。例如针对url /articles/2017/12/相当于按以下方式调用视图函数views.month_archive(request, year2017, month12)year和month的位置可以换没所谓了因为是按照名字来取数据的还记得关键字参数吗在实际应用中使用分组命名匹配的方式可以让你的URLconf 更加明晰且不容易产生参数顺序问题的错误但是有些开发人员则认为分组命名组语法太丑陋、繁琐。至于究竟应该使用哪一种你可以根据自己的喜好来决定。URLconf匹配的位置URLconf 在请求的URL 上查找将它当做一个普通的Python 字符串。不包括GET和POST参数以及域名。例如http://www.example.com/myapp/ 请求中URLconf 将查找myapp/。在http://www.example.com/myapp/?page3 请求中URLconf 仍将查找myapp/。URLconf 不检查请求的方法。换句话讲所有的请求方法 —— 同一个URL的POST、GET、HEAD等等 —— 都将路由到相同的函数。捕获的参数永远都是字符串每个在URLconf中捕获的参数都作为一个普通的Python字符串传递给视图无论正则表达式使用的是什么匹配方式。例如下面这行URLconf 中url(r^articles/(?P[0-9]{4})/$, views.year_archive),传递到视图函数views.year_archive() 中的year 参数永远是一个字符串类型。视图函数中指定默认值# urls.py中from django.conf.urls import urlfrom . import viewsurlpatterns [url(r^blog/$, views.page),url(r^blog/page(?P[0-9])/$, views.page),]# views.py中可以为num指定默认值def page(request, num1):pass在上面的例子中两个URL模式指向相同的view - views.page - 但是第一个模式并没有从URL中捕获任何东西。如果第一个模式匹配上了page()函数将使用其默认参数num“1”,如果第二个模式匹配page()将使用正则表达式捕获到的num值。include其他的URLconfs(也叫URL分发)问大家一个问题views和models文件是不是都放在每一个app应用里面了啊而urls.py这个文件放在哪了是不是放在项目文件夹里面了说明什么说明是不是所有的app都在使用它如果你一个项目有10个应用没有应用有100个url那意味着你要在urls文件里面要写多少条url对应关系并且所有的app的url都写在了这一个urls文件里面啊这样好吗当然也没有问题但是耦合程度太高了所以django在url这里给你提供了一个分发接口叫做include#At any point, your urlpatterns can “include” other URLconf modules. This#essentially “roots” a set of URLs below other ones.#For example, here’s an excerpt of the URLconf for the Django website itself.#It includes a number of other URLconfs:from django.conf.urls import include, urlurlpatterns [url(r^admin/, admin.site.urls),url(r^blog/, include(blog.urls)), # 可以包含其他的URLconfs文件url(r^app01/,include(app01.urls)), #别忘了要去app01这个应用下创建一个urls.py的文件现在的意思是凡是以app01开头的路径请求都让它去找app01下的urls文件中去找对应的视图函数还要注意一点此时这个文件里面的那个app01路径不能用$结尾因为如果写了$就没办法比配上app01/后面的路径了]app01的urls.py的内容(其实就是将全局的urls.py里面的内容copy一下放到你在app01文件夹下创建的那个urls.py文件中把不是这个app01应用的url给删掉就行了)from django.conf.urls import url#from django.contrib import adminfrom app01 import viewsurlpatterns [# url(r^admin/, admin.site.urls),url(r^articles/2003/, views.special_case_2003,{foo:xxxxx}),url(r^articles/(\d{4})/(\d{2})/, views.year_archive),]此时的目录结构此时我们再访问之前的articles相关的网址路径的时候就需要写上app01开头的了正确输入方式其实相当于做了什么呢将网址http://127.0.0.1:8000/app01/articles/2003/里面的路径部分app01/articles/2003/到项目的urls.py里面匹配匹配到了app01/然后拿着路径剩余的部分articles/2003/去app01里面的urls.py文件里面进行匹配找到对应的函数执行。还要注意一点看下面的$符号再来看如果我们想通过输入http://127.0.0.1:8000/app01/看到app01这个应用的首页怎么办就像我现在输入一个http://127.0.0.1:8000来查看网站的首页怎么办也就是说我后面不加任何路径就看你网址的首页怎么办一般网站的根路径都是网站的首页对不对看下面这种写法可不可以views.py里面写了这么个函数输入网址发现都跑到index这个函数里面去执行了也就是说全部被这个没有匹配规则的url获取到了对不对所以正确的写法匹配根路径的写法url(r^$, views.index),#以空开头还要以空结尾写在项目的urls.py文件里面就是项目的首页写在应用文件夹里面的urls.py文件中那就是app01的首页app01函数的内容还有注意一点就是加app的时候需要进行配置传递额外的参数给视图函数(了解)URLconfs 具有一个钩子让你传递一个Python 字典作为额外的参数传递给视图函数。django.conf.urls.url() 函数可以接收一个可选的第三个参数它是一个字典表示想要传递给视图函数的额外关键字参数。例如from django.conf.urls import urlfrom . import viewsurlpatterns [url(r^blog/(?P[0-9]{4})/$, views.year_archive, {foo: bar}),#注意这就像一个命名分组一样你的函数里面的必须有一个形参形参必须叫做foo才行。]在这个例子中对于/blog/2005/请求Django 将调用views.year_archive(request, year2005, foobar)。这个技术在Syndication 框架中使用来传递元数据和选项给视图。