Django-1-URL路由系统

时间:2024-01-03 12:39:32

一、分发地址

在APP中创建urls.py文件,将属于该APP的url地址都写入到这个文件中,当程序收到用户发送的请求时,先在根目录的urls.py文件中查找该地址属于哪个APP,将这个请求分发到该APP中,然后在APP的url.py中找到具体信息。

 from django.urls import path,include #include就是分发函数
     urlpatterns = [
         path('1/',include(‘index.urls’))     #index是APP名字
 ]

二、带变量的URL

一个url地址可以代表多个不同页面,需要用到变量,URL的变量类型有四种,分别是字符串类型、整型、slug和uuid。其中默认是字符串类型。

path('<year>/<int:month>/<slug:day>',``````)

在URL中使用<>可以设置变量,在括号中以冒号分为两个部分,冒号前为变量类型,不加则为字符串类型,冒号后为变量名。

三、在URL中使用正则表达式

在url中可以使用正则表达式来限制可变范围,有两种引入方式:

#方法一
from django.urls import path,re_path

urlpatterns = [
    re_path('(?P<year>(\d+))',``````),
]

#方法二
from django.urls import path
from django.conf.urls import url

urlpatterns = [
    url(r'......',``````),    #必须在url前加r
]

  注意:如果在URL中使用了正则,则URL末端必须加上斜杠或者其他字符,否则正则表达式就不会生效,输入无限长的字符串都可以正常访问。

四、URL中设置参数

1、参数name

  除了在URL中设置变量外,还可以为URL起别名,可以在html模板中使用:

path('hello/',views.index, name='myname')
<body>
    <a href="{% url 'myname' %}">click this<a>
</body>

给URL起别名看似没有必要,但是如果改变了URL的路径,则需要修改所有html中用到该URL的地方,这个时候使用别名就可以省去这些麻烦。

在templates和views中,都可以通过别名来生成url地址:

Django-1-URL路由系统

2、其他参数

  除了name参数外,还可以设置一种字典类型的参数,这种参数相当于为html模板定义变量并赋值,也只能在模板中使用。

path('hello',views.index,name='myname',{'change':'yes'})
<a href="{% url 'name' %}">{{ chang }}</a>    #这里的{{change}}就会在页面上显示为yes

五、Django的路径添加问题

  在settings中添加 APPEND_SPASH = False 可以阻止django自动添加url最后的斜杠。