django url位置参数传递到view函数
位置参数是指我们在uri的路径中将数据通过url传递给视图函数的一种方式,先看段代码,然后我们分析下传递的过程
urls部分
urlpatterns = [
url(r'^hello/([0-9]{4})/([0-9]{2})/([0-9]{2})',index),
]
view部分
def index(request, *args, **kwargs):
print(args)
return HttpResponse("hello")
用户访问的url
http://10.89.0.5:8000/mytest/hello/2018/06/05
查看控制台输出
System check identified no issues (0 silenced).
June 05, 2018 - 12:29:20
Django version 1.11.13, using settings 'reboot_dj.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
('2018', '06', '05')
以上的代码块,我们首先看view部分的,这里我们看到在我们定义的视图函数中接收request和*args, *kwargs几种数据,那么request接收是被django封装后的请求数据,args, **kwargs接收的就是uri中的数据,至于怎么发送数据给视图函数,那就是urls部分的定义了
urls中当前仅用了最基本的正则匹配,匹配年月日的信息,注意这次的匹配没有key-value的对应关系。当用户的请求到该匹配项的时候,匹配项会对uri的每一层进行对应层的正则数据匹配,匹配完成后将数据给到view的视图中。
根据上边的例子,urls最后的调用函数应该是
index(request,"2018","06","05")
捕获位置参数,在url定义的正则表达式中将要传递的数据用()括起来就好,括号内填写匹配数据的正则表达式。
比如url(r'^hello/([0-9]{4})/
含义就是对用户访问url http://xxx/hello/对这里的数据进行匹配
OK 上边的例子是传递没有key-value数据的例子,如果想要给view函数传递有k-v的数据怎么玩呢?稍稍修改下url信息
view部分
def index(request, *args, **kwargs):
print(kwargs)
return HttpResponse('hello')
urls部分
urlpatterns = [
url(r'^hello/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})',index),
]
ok然后访问吧,访问后看控制台的输出
System check identified no issues (0 silenced).
June 05, 2018 - 12:58:15
Django version 1.11.13, using settings 'reboot_dj.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
{'year': '2018', 'month': '06', 'day': '00'}
可以看到,我们urls给视图函数传递数据的时候有了k-v的数据格式
根据上边的例子,urls最后的调用函数应该是
index(request,year="2018",month="06",day="05")