美文网首页
django url位置参数传递到view函数

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

作者: 鸟它鸟 | 来源:发表于2018-06-05 21:02 被阅读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")

    相关文章

      网友评论

          本文标题:django url位置参数传递到view函数

          本文链接:https://www.haomeiwen.com/subject/rmvmsftx.html