django url位置参数传递到view函数

2018-06-05  本文已影响0人  鸟它鸟

位置参数是指我们在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")

上一篇下一篇

猜你喜欢

热点阅读