Django之urls里name及生成url

urls的简单用法

  简单来说,客户端来一个请求,首先来到urls里面(这里urls是cmdb这个项目下的urls),找到test1然后通过views.test1找到views模块里面的test1方法

  urls:

    

  views模块里面的test1方法,返回的html文件名是test1.html

    

  test1.html文件

    

  内容如下;我们能看到这个表单提交的地址是/cmdb/test1,其实它就是提交到了上面的test1方法里面了。

    

问题1

   如果我的url变成了abcdefghigklmn,我就需要分别在html、urls文件里面,views模块下的方法都得改,项目大了以后,每次修改都会修改错误,有很大风险。

  解决方法:

  urls里面加name属性。

    

   在html文件里面,注意文件名不用变,views模块下的原来方法名不用变。

    

    

  不管你这个cmdb后面的url变成什么样子的,它返回的都是views下原来的test1的这个方法,html文件也还是test1.html。

    

  也就是说html文件里面的{% url "test11" %}这个test11和urls模块里面的name名字一样就行,剩下的匹配url你想怎么变就怎么变,再也不用满世界都改url了。

 问题2

  如果我想传参数怎么办?如下图所示:

      

  解决办法:

    1、先改url让它接收用户参数

      

     2、在html文件里面占上位置

      

    3、views模块下的test1方法设置形式参数

      

    4、看结果,不管用户输入的参数是多少,最后提交的地址都是1,也就是上面我们写死的。

      

    捋一下请求周期:

      首先用户输入url后请求来urls里面匹配,然后后面的views.test1告诉它你去test1这个方法里面找返回内容,可test1方法里面返回的是test1.html文件,最后把内容返回给了用户。

      我们能得出一个结论,action里面的后台test1和urls下name的变量都算是形式参数,urls只是告诉了用户,不管你前面的urls多长怎么变,都来找我name变量内容,我能帮你把你这个变态的url当做参数传给action属性。

      但是你要是说需要单独匹配的参数,必须在test1方法里设置形参,用来接收参数。

 问题3

   问题2中不管用户请求的url是多少,action里面永远都是写死的,有些人就是想说,我就想让它变成我请求什么,你就往哪提交。

   解决方法:
    1、views下的test1方法Django给我们提供了打印当前url的方法

      print(request.path_info)

    2、我们可以把这个方法直接写到html文件里面。

      

     3、请求的时候你就会发现,用户请求的是多少,action的url就是多少。

      

生成url方法

  对URL路由关系进行命名, ***** 以后可以根据此名称生成自己想要的URL *****,下面是生成的三种方法,分别用i1、i2、i3来标注。

  url(r'^asdfasdfasdf/', views.index, name='i1'),
  url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'),
  url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),

  def func(request, *args, **kwargs):
    from django.urls import reverse

    url1 = reverse('i1') # asdfasdfasdf/
    url2 = reverse('i2', args=(1,2,)) # yug/1/2/
    url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/

  xxx.html
    {% url "i1" %} # asdfasdfasdf/
    {% url "i2" 1 2 %} # yug/1/2/
    {% url "i3" pid=1 nid=9 %} # buy/1/9/

  需要解释一下:

  url不用说了。

   

   生成一个urli3待会儿打印

  

   模板语言里2和10是死的,后面你会看到你写成多少,html里就是多少。

   

   我们发现html写的是2和10这里还是2和10说明,这里是写死的,只不过用户访问的3和11跟他没关系。

  

  生成的url打印完是下面这样的,这里可以让用户跳转到这个url。

  

 

posted @ 2021-07-02 17:32  Charles.L  阅读(341)  评论(0)    收藏  举报