django–url
当我们创建了一个项目时,系统为我们创建了一份urlconf, 它可能是这样的:
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
- r’^admin/’中的r 表示这是一个原始字符串,这样避免了使用过多的转义符
- 不需要在^admin/前面加/, 因为django会自动为表达式添加。
- ^ 表示对字符串的头部进行匹配,看下面的例子:
'^admin/' 表示以time/开始的任意url都会匹配,比如/admin/foo 和 /admin/bar
现在路由只有一条,那我们想要在我们的页面上显示时间, 下面来进行这些操作:
首先我们要在views里创建一个显示时间的函数:
from django.shortcuts import render, HttpResponse
import datetime def show_time(request):
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
html = '<html><body>%s</body></html>' % now
return HttpResponse(html)
视图已经有了,如果想让它在页面上显示的话,我们还需要一个路由:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^time/$', views.show_time),
]
我们添加的这条路由多了一个$ 号, 意思是 对字符串的尾部进行匹配. '^time/$' 就是匹配/time/不能多也不能少。
这样我们就可以通过http://localhost:8000/time看到输出结果了。
总结一下url里的正则:
| 符号 | 匹配 |
| . | 任意字符 |
| \d | 任意数字 |
| [A-Z] | A-Z中的任意字符 |
| [a-z] | a-z中的任意字符 |
| [A-Za-z] | 任意大小写字母 |
| + | 匹配一个或多个前面的字符 |
| [^/]+ | 匹配一个或多个不是/的字符 |
| * | 匹配0个或多个前面的字符 |
| {1,3} | 匹配1个到3个前面的字符 |
最后,是一些示例:
注意:url匹配是从上往下,有匹配的就不往下走了,所以一般把精确匹配的放在上面
url(r'^admin/', admin.site.urls),
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive), #url传递给views时会传递两个值,一个是request, 一个是([0-9]{4})匹配到的值
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), #request, 两个正则匹配的值, 一个() 一个参数
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+).(\w+)/$', views.month_archive),
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), #year表示给正则一个别名,在正则中可以通过obj.group('year')获取到匹配到的值
这里需要注意的是:如果url里指定了别名是year, 那么在views中参数名也必须叫year, 否则会报错,但是参数位置就没关系 了。。
views接收到的参数总是字符串类型。
url中的include
如果我们的项目有多个app, 那么我们可以将每个app的url分离出来,这样可以每个app单独管理,方便 维护:
from app01 import urls as payment_urls
url(r'^payment/', include('payment_urls')),
django–url的更多相关文章
- Django Url编码问题
Django Url编码问题 最近在学习Django,写一个blog程序练练手手.对于一个才开始接触web开发的来说,难免会遇到一些问题. 有一个这样的模板: {%for k,v in cat ...
- Django URL(路由系统)
Django URL Django 1.11版本 URLconf官方文档 URL配置(URLconf)就像 Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的 ...
- python :Django url /views /Template 文件介绍
1,Django URL 路由系统 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:你就是以这种方式告诉Django ...
- 第五篇Django URL name 详解
Django URL name 详解 利用Django开发网站,可以设计出非常优美的url规则,如果url的匹配规则(包含正则表达式)组织得比较好,view的结构就会比较清晰,比较容易维护. Djan ...
- django url路径与模板中样式相对路径的问题
static目录下有css和js及image等文件夹,里面放置网站的一些静态文件,static位于网站根目录下,django中配置静态文件这个就细说,网上都有,昨天在添加新内容时发现一个问题,我的ur ...
- Python自动化之django URL
URL url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail) 会把(?P\d+)和(?P\d+)传到后台 需 ...
- Django URL name详解
我们基于上一节的代码来开始这一节的内容. 上节源代码:zqxt_views(django 1.4 - django 1.10).zip [更新于 2016-09-06 00:13:23] 1. 打开 ...
- django url.py使用
主要对象:patterns和url url有两个主要的参数,第一个是正则模板,第二个是处理的方法 他们的对应关系是,当我们在浏览器当中url的形式与正则相匹配时 就转向处理方法 如果url.py中的值 ...
- Django URL传递参数的方法总结(转)
1 无参数情况 配置URL及其视图如下: 1 2 3 4 (r'^hello/$', hello) def hello(request): return HttpResponse("He ...
- Django url()函数详解
url()函数看起来的格式象: url(r^/account/$', views.index, name=index) ,它可以接收四个参数,分别是两个必选参数: regex . view 和两个可选 ...
随机推荐
- AHOI2013 Round2 Day1 简要题解
第一题,好吧这是个dp.(搜素也能在BZOJ上卡过). 第二题,BFS搜索碰到的立方体面数,智硬没有想到... 第三题,其实一看就有思路,但关键是求x坐标不交的矩形对数+y坐标不交的矩形对数 - x, ...
- 开源软交换系统 FreeSwitch 与 Asterisk 比较
Asterisk 与freeswitch都是流行的开源软交换服务器,Asterisk出现的比较早,大概在1999年开始此项目,应该是最流行的开源软交换服务器,整个社区上下游都已经很成熟. freesw ...
- openstack domain serverID connect uri
- 发现UC/OS-III源码有一处不明白!会不会是BUG.高手过来看看!
http://www.amobbs.com/archiver/tid-4939669.html ———————————————————————————————————————————————————— ...
- thymeleaf条件表达式
条件表达式形式:condition, then and else <tr th:class="${row.even}? 'even' : 'odd'"> ... < ...
- [iOS微博项目 - 1.7] - 版本新特性
A.版本新特性 1.需求 第一次使用新版本的时候,不直接进入app,而是展示新特性界面 github: https://github.com/hellovoidworld/HVWWeibo ...
- C#中的表达式树简介
表达式树是.NET 3.5之后引入的,它是一个强大灵活的工具(比如用在LINQ中构造动态查询). 先来看看Expression类的API接口: using System.Collections.Obj ...
- 159. Longest Substring with At Most Two Distinct Characters
最后更新 二刷 08-Jan-17 回头看了下一刷的,用的map,应该是int[256]的意思,后面没仔细看cuz whatever I was doing at that time.. wasnt ...
- 让EditText不能自动获取焦点
在activity中放置了1个或1个以上的EditText,进入该activity的时候第一个EditText会接收焦点,我希望里面所有的EditText默认是不接收焦点的,该怎么做呢? 方法: 在第 ...
- 【转】【React Native开发】
[React Native开发]React Native控件之ListView组件讲解以及最齐全实例(19) [React Native开发]React Native控件之Touchable*系列组 ...