Django url (路由)

**1、路由的基本使用:**? #url 是个函数,有四个参数,第一个参数要传正则表达式,第二个参数传函数内存地址,第三个传默认参数,第四个传路由别名? url(r^yaopipqideneirong/article/aa.html$,views.test),? -路由从上往下匹配,一旦匹配成功,后面就不继续匹配了**2、路由的无名分组**? url(rtest2/(\d+)/(\w+)$,views.test2),? 无名分组分出几个值,试图函数就要接受几个值(位置参数形式传过来的)**3、路由的有名分组(用的比较多)**? url(r^test3/(?P<id>\d+)/(?P<name>\w+)$,views.test3),有名分组分出几个值,视图函数就要接受几个值(按关键字传入,位置可以打乱)**4、有名和无名不能混着用****5、在settings中配置(以后项目,一般不用动)**? 默认是true,浏览器浏览的时候,默认加上斜杠? 如果是false,浏览器默认不会加 /? APPEND_SLASH=False**6、路由分发**? 1、在 主 路由中导入 include? -from django.conf.url import include? 2、在主路由中:```python url(r"^app02/",include("app02.urls")), url(r"^app03/",include("app03.urls")),```? 3、在不同app中新建一个urls? from app02 import views? urlpatterns=[? url(r^test/,views.test), ]? 4、如果浏览器输入app02/test/,就会响应到app02下views中的test去执行**7、反向解析:**? 干什么用?? -在视图函数中重定向的地址原来是写死的,如果url地址变更,我需要所有的url都修改,很麻烦,所以通过反向解析,获得url的地址? 如何使用:? -路由层(项目自己的):? url(r"^test_2/", views.test_2,name="test") test为test_2的别名? -视图层:(用的比较多)? from django.shortcuts import reverse? url = reverse( test ) #上面路由的别名? 如果做了分组? url = reverse(”url地址的别名“,args=[] , kwargs={})? -模板层(也就是前端):(用的比较多)? {% url "url地址的别名"%}? href= “ {% url ”url地址的别名“ 参数1 参数2%} ”**8、名称空间**? -路由分发是,可以指定名称空间:? -url(r^app02/,include(app02.urls,namespce=app02)),? -url(r^app03/,include("app03.urls",namespace="app03")),? -在视图中反向解析:? url=reverse(”app02:test“)? -在模板中反向解析:? {%url ”app02:url 地址的别名“%}? -个人不建议这么使用:? 在不同app的url中起别名的时候,添加app名_别名**9、 django 2.0的path,re_path(了解)** -1.几的url就是2.几的re_path -2.0的path 第一个参数不再是正则表达式 -5个转换器:int,str,slug,path,uuid**10、 自定义转换器(了解):** -1 写一个类:? class MyCon:? regex = [0-9]{4}? def to_python(self, value):? return int(value)? def to_url(self, value):? return %04d % value -2 在urls中:? -from django.urls import register_converter? -register_converter(类名,别名)? ? -path(test/<别名:year>, views.test,name=year),```作业: day78 ```

 

相关文章