Django url (路由)
Posted tf511
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django url (路由)相关的知识,希望对你有一定的参考价值。
**1、路由的基本使用:** ? #url 是个函数,有四个参数,第一个参数要传正则表达式,第二个参数传函数内存地址,第三个传默认参数,第四个传路由别名 ? url(r‘^yaopipqideneirong/article/aa.html$‘,views.test), ? -路由从上往下匹配,一旦匹配成功,后面就不继续匹配了 **2、路由的无名分组** ? url(r‘test2/(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 ```
以上是关于Django url (路由)的主要内容,如果未能解决你的问题,请参考以下文章