django外调用url_Django url

三 分组命名匹配

上面的示例使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图。

在更高级的用法中,可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。

在Python的正则表达式中,分组命名正则表达式组的语法是(?Ppattern),其中name是组的名称,pattern是要匹配的模式。

下面是以上URLconf 使用命名组的重写:

from django.conf.urls import url

from . import views

urlpatterns = [

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, year="2017", month="12"),year和month的位置可以换,没所谓了,因为是按照名字来取数据的,还记得关键字参数吗?

在实际应用中,使用分组命名匹配的方式可以让你的URLconf 更加明晰且不容易产生参数顺序问题的错误,但是有些开发人员则认为分组命名组语法太丑陋、繁琐。

至于究竟应该使用哪一种,你可以根据自己的喜好来决定。

URLconf匹配的位置

URLconf 在请求的URL 上查找,将它当做一个普通的Python 字符串。不包括GET和POST参数以及域名。

例如,http://www.example.com/myapp/ 请求中,URLconf 将查找myapp/。

在http://www.example.com/myapp/?page=3 请求中,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 url

from . import views

urlpatterns = [

url(r'^blog/$', views.page),

url(r'^blog/page(?P[0-9]+)/$', views.page),

]

# views.py中,可以为num指定默认值

def page(request, num="1"):

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, url

urlpatterns = [

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 admin

from app01 import views

urlpatterns = [

# 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 url

from . import views

urlpatterns = [

url(r'^blog/(?P[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),#注意,这就像一个命名分组一样,你的函数里面的必须有一个形参,形参必须叫做foo才行。

]

在这个例子中,对于/blog/2005/请求,Django 将调用views.year_archive(request, year='2005', foo='bar')。

这个技术在Syndication 框架中使用,来传递元数据和选项给视图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css在盒子中垂直居中和固定居中

顶部固定居中 <div class"w960 fixed">我是固定的</div>.w960{ width: 960px; margin:0 auto; } .fixed{ position: absolute; top:0; left: 0; right: 0; height: 90px; background: #ececec; } 垂直居中 <div id"box"><div class&q…

数据库的前世今生

译者 | 谭开朗编辑 | 屠敏来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;【CSDN 编者按】被称之为基础软件三驾马车之一的数据库&#xff0c;在经历了层次型和网状型、关系型数据型库以及更加强大的数据管理功能等三个时期之后&#xff0c;其在未来的发展历程中还…

python常用算法有哪些_python常见的排序算法有哪些?

大家都知道&#xff0c;关于python的算法有很多&#xff0c;其中最为复杂的就是python的排序算法&#xff0c;因为它并不是单一的&#xff0c;而是复杂的&#xff0c;关于排序算法就有好几种不同的方式&#xff0c;大家可以根据以下内容&#xff0c;结合自己的项目需求&#xf…

android app links,Android APP Links 配置

一. 简介在Instant App开发中&#xff0c;需要app支持Instant App Links. 本文中&#xff0c;主要介绍其作用&#xff0c;配置必需条件&#xff0c;配置的过程。二. 作用App Links 本质上是 Deep Link 的一种延伸&#xff0c;我们知道&#xff0c;Deep Link配置在Manifest之后&…

adnroid 打包问题 :compileReleaseJavaWithJavac

今天打包的时候&#xff0c;由于着急。改了些本地的变化就assembleRelease. 然后就报错&#xff1a; compileReleaseJavaWithJavac 后来网上乱找&#xff0c;。。。。 之后我想到先跑一下&#xff0c;果然是因为少一个字符串。 所以&#xff0c;以后打包的时候&#xff0c;…

联想e480一键恢复小孔_联想电脑如何一键恢复系统

联想电脑的一键还原系统在需要使用的时候直接按下一键还原按键即可&#xff0c;那么大家知道吗?今天小编与大家分享下联想电脑系统恢复的具体操作步骤&#xff0c;有兴趣的朋友不妨了解下。联想电脑系统恢复方法重要提醒&#xff1a;在您做一键恢复到出厂设置前&#xff0c;请…

【边缘计算】对边缘计算的理解与思考

来源&#xff1a;边缘计算社区在2019年第三届边缘计算技术研讨会上华为高级产业发展经理、ECC需求与总体组副主席黄还青发表了《ECC及华为在边缘计算领域的思考与实践》主题演讲&#xff0c;本文为黄还青演讲中对边缘计算理解及思考。首先我们认为边缘计算的兴起应该是在过去三…

python中注释的快捷键_【Python】注释

一、Python注释&#xff1a; 1.单行注释 python中单行注释采用 # 开头。 #!/usr/bin/python # coding:utf-8 import os import sys import optparse def print_name(): name os.path.dirname(sys.argv[0]) print name #打印输出 print_name() 2.多行注释 python 中多行注释使用…

【代码笔记】iOS-实现网络图片的异步加载和缓存

代码&#xff1a; - (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.self.title"EGOImageViewDemo"; //实现网络图片的异步加载和缓存 EGOImageView *imageView [[EGOImageView alloc] initWithPlaceholderImage:[UIIm…

python executemany执行延迟_运维架构师-Python 自动化运维开发-031

*运维架构师-Python 自动化运维开发-031十九、Python3 操作数据库1、Python3 操作 MySQL1、基本介绍Python3 操作 MySQL 数据库 可以使用的模块是 pymysql 和 MySQLdb。这个两个模块都是通过自己的 API 执行原生的 SQL 语句实现的。MySQLdb 是最早出现的一个操作 MySQL 数据库的…

bilibili 解析_用 Python 抓取 bilibili 弹幕并分析!

时隔一年&#xff0c;嵩哥带来他的新作《雨幕》。他依旧认真创作&#xff0c;追求高品质&#xff0c;作品在发表之前已听了五百遍以上。如此高品质的音乐&#xff0c;大家如何评价呢&#xff1f;通过哔哩哔哩上的视频弹幕&#xff0c;感受一下。01 实现思路首先&#xff0c;利用…

2019中国科学院、中国工程院院士增选名单正式发布

来源&#xff1a;医谷医学讯 今日&#xff0c;“两院”院士2019年增选名单正式公布。中国科学院选举产生了64名中国科学院院士和20名中国科学院外籍院士。中国工程院共选举产生75位院士和29位外籍院士。2019年新当选中国科学院院士名单&#xff08;共64人&#xff0c;分学部按姓…

微信 小程序 canvas

测试手机为IPHONE6,开发者工具版本0.10.102800。开发者工具0.11.112301版本也一样 微信小程序里的canvas 非 h5 canvas有很多不一样的地方&#xff0c;以下把微信小程序的canvas叫做wxcanvas 下面全是我一点点测试出的干货&#xff0c;耐心看&#xff1a; 1.wxcanvas,不像h5can…

Android App赞赏功能,微信公众号赞赏功能升级:作者可直接收到赞赏, iOS安卓均可用...

DoNews6月6日消息 (记者 费倩文)微信公众平台发布消息称&#xff0c;公众号赞赏功能升级为“喜欢作者”&#xff0c;开启了赞赏的文章在原创文章底部有“喜欢作者”的入口&#xff0c;作者可以直接收到读者赞赏&#xff0c;在 iOS 版和 Android 版微信上都可以使用。据了解&…

基于单片机的功放protues_基于Proteus的音频放大器电路设计与仿真详解.doc

毕 业 论 文学生姓名尹有友学 号171107078学院 物理与电子电气工程学院专 业电子信息工程题 目基于Proteus的音频放大电路设计与仿真指导教师付浩 副教授/学士2015年5月论文原创性声明内容本人郑重声明&#xff1a;本论文是我个人在导师指导下进行的研究工作及取得的研究成果。…

hashcode是什么意思_什么才是 Java 的基础知识?

作者&#xff1a;晓风轻链接&#xff1a;zhuanlan.zhihu.com/p/28615617近日里&#xff0c;很多人邀请我回答各种j2ee开发的初级问题&#xff0c;我无一都强调java初学者要先扎实自己的基础知识&#xff0c;那什么才是java的基础知识&#xff1f;又怎么样才算掌握了java的基础知…

BZOJ 1305 二分+网络流

思路&#xff1a; 建图我根本没有想到啊……. &#xff08;我是不会告诉你我借鉴了一下题解的思路&#xff09; 把每个人拆成喜欢的和不喜欢的点 男 喜欢 向 男 不喜欢 连 边权为k的边 如果男喜欢女 那么 男喜欢向 女喜欢 连 1 如果男 不喜欢女 那么 男不喜欢 向 女不喜欢 连1…

迄今最详细宇宙模型建成

来源&#xff1a;科技日报一个国际科研团队最近创建了迄今最详细的大尺度宇宙模型TNG50。这一虚拟宇宙“芳龄”约138亿岁、宽约2.3亿光年&#xff0c;包含数万个正处于演化中的星系&#xff0c;星系的细节程度与单星系模型中的相当。该模型跟踪了200多亿个代表暗物质、气体、恒…

Android仿qq网络不给力,《天天酷跑》qq授权失败网络不给力?解决_图文攻略_高分攻略_百度攻略...

问&#xff1a;天天酷跑qq授权失败网络不给力&#xff1f;有神门解决办法答&#xff1a;其实这个问题小编是没有出现过&#xff0c;大部分情况是因为网速的原因&#xff0c;然后小编重新登录一下一般就可以了&#xff0c;不知道小伙伴们为什么会一直显示qq授权失败网络不给力&a…

深入浅出的mysql第三版和第二版的区别_深入浅出mysql数据库开发(第二版)笔记...

第一部分&#xff1a;【基础篇】2.2.1&#xff1a;SQL分类1)DDL(Data Definition Languages): 数据定义语言常用语句&#xff1a;create&#xff0c;drop&#xff0c;alter 等2)DML(Data Manipulation Language):数据操作语句常用语句&#xff1a;insert&#xff0c;delete&…