Django:URL-patterns的高级使用方式与URL传递参数
2016-05-10 09:55
691 查看
1、多个视图函数在patterns中的简洁写法:每一个视图对应一个patterns,在patterns中指定视图所在的位置
from django.conf.urls.defaults import *from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('dapp1.views', #第一个参数指定视图所在的位置
(r'^hello/$','hello'), #引用视图中的hello函数,注意这里需要使用单引号
(r'^world/$','world'),
(r'^$', 'home'),
)
urlpatterns += patterns('contact.views', #第二个视图,urlpatterns是个元组,满足可加性
(r'^contact/$','contact'),
)
2、传递额外参数到视图函数中(额外参数也称为关键字参数)
# urls.py
from django.conf.urls.defaults import * from mysite import views urlpatterns = patterns('', (r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}), #不同路径对应同一个视图 (r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}), #但展现的模板不同 )
# views.py from django.shortcuts import render_to_response from mysite.models import MyModel def foobar_view(request, template_name): # 捕获第二个参数
m_list = MyModel.objects.filter(is_new=True) return render_to_response(template_name, {'m_list': m_list})
3、在url路径中给传递参数命名,在对应的视图函数中根据命名参数获取他的值(传递参数也称为位置参数)
/mydata/jan/01/ /mydata/jan/02/ /mydata/jan/03/ # ... /mydata/dec/30/ /mydata/dec/31/urls.py
urlpatterns = patterns('', (r'^mydata/(?P<month>w{3})/(?P<day>dd)/$', views.my_view), #在正则表达式前加上?<name>命名参数
(?<name>exp) | 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) |
def my_view(request, month, day): # ....
另外,根据url的提示,给定参数值,作为额外参数进行传递额
urlpatterns = patterns('', (r'^mydata/birthday/$', views.my_view, {'month': 'jan', 'day': '06'}),# (r'^mydata/(?P<month>w{3})/(?P<day>dd)/$', views.my_view), )
views.py
def my_view(request, month, day): # ....
如果URLconf捕捉到的一个命名组变量和一个额外URLconf参数包含的变量同名时,额外URLconf参数的值会被使用。
urlpatterns = patterns('', (r'^mydata/(?P<id>d+)/$', views.my_view, {'id': 3}), )
4、当页面需要传递参数但实际上没有参数传递时,可以使用缺省视图的情况
# urls.py
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^blog/$', views.page), #URLconf中把特殊情况放在首位的处理
(r'^blog/page(?P<num>d+)/$', views.page),
)
# views.py
def page(request, num='1'):
# Output the appropriate page of blog entries, according to num.
# ...
在这里,两个URL表达式都指向了同一个视图 views.page ,但是第一个表达式没有传递任何参数。
如果匹配到了第一个样式, page() 函数将会对参数 num 使用默认值 "1" ,如果第二个表达式匹配成功, page() 函数将使用正则表达式传递过来的num的值。(注:我们已经注意到设置默认参数值是字符串
`` ‘1’`` ,不是整数`` 1`` 。为了保持一致,因为捕捉给`` num`` 的值总是字符串。每个被捕获的参数将被作为纯Python字符串来发送。
5、包含其他urls
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^weblog/', include('mysite.blog.urls')), #注意这里不使用$来匹配结束,因为路径后面的参数可能会被包含urls中的patterns匹配 (r'^photos/', include('mysite.photos.urls')), (r'^about/$', 'mysite.views.about'), )
一个被包含的URLconf接收任何来自parent URLconfs的被捕获的参数,被捕获的 username 变量将传递给被包含的
URLconf,进而传递给那个URLconf中的 每一个 视图函数。
urlpatterns = patterns('', (r'^(?P<username>w+)/blog/', include('foo.urls.blog')), )
另外,传递额外的URLconf选项到 include() ,
就像你可以通过字典传递额外的URLconf选项到普通的视图。 当你这样做的时候,被包含URLconf的 每一 行都会收到那些额外的参数。与捕获参数时等价的
urlpatterns = patterns('', (r'^blog/', include('inner'), {'blogid': 3}), )
这种技术仅当你确信在涉及到的接受到额外你给出的选项的每个URLconf时有用的才奏效。
相关文章推荐
- Create a Virtual Reality Game For Google Cardboard
- golang学习第二篇 开发环境的搭建
- Golang测试技术
- 龙书(Dragon book) +鲸书(Whale book)+虎书(Tiger book)
- 【转】十条有用的 Go 技术
- Go语言学习(十三)面向对象编程-继承
- Google地图的坑SupportMapFragment.getmap() returns null
- django获取指定列的数据
- 我是实践派之mongo的一主多从
- Go语言学习(十二)面向对象编程-结构体
- Bigtable 具体是怎样一个东西?和 MapReduce, Google File System 之间的关系是什么?
- Ubuntu 中给google配置HOSTS的方法
- Golang 模块扩展
- Go语言学习资料汇总
- Go语言学习(十一)面向对象编程-类型系统
- Django笔记(番外):虚拟环境
- LightOj 1259-Goldbach`s Conjecture(素数打表)
- POJ2762 Going from u to v or from v to u
- VK Cup 2016 - Round 1 (Div. 2 Edition) C. Bear and Forgotten Tree 3
- django简明操作(自强学堂)