Django入门到放弃之路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | # 项目文件夹下的urls.py文件中的url写法: from django.conf.urls import url,include from django.contrib import admin from app01 import views urlpatterns = [ # url(r'^admin/', admin.site.urls), #首页 url(r '^$' , views.base), url(r '^app01/' , include( 'app01.urls' )), url(r '^app02/' , include( 'app02.urls' )), ] # app01下urls.py内容写法 from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r '^$' , views.app01base), url(r '^index/' , views.index), ] app02下urls.py内容写法 from django.conf.urls import url from django.contrib import admin from app02 import views urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r '^$' , views.app02base), url(r '^home/' , views.home), ] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #1 无名分组的使用 ### 无名分组,把分组分出来的值,当作位置参数传递给视图函数 url(r '^login/([0-9]{4})/([0-9]{2})' , views.login), #2 有名分组的使用 ### 有名分组,把分组出来的值,当作关键字参数传递给视图函数 url(r '^login/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})' , views.login), #3 有什么作用 可以从url地址中解析出参数,传递给视图函数使用 #4 案例 # 这种地址,把人名和id分出来 # 有名分组 # ilovejaney/p/13748739.html url(r '^(?P<name>.*?)/p/(?P<id>\d+).html' , views.article), # 无名分组 url(r '^(.*?)/p/(\d+).html' , views.article), # 5 伪静态 - 原来是动态页面 / login 做成 / login.html 伪装成静态页面,便于seo优化 - seo优化: - https: / / www.cnblogs.com / liuqingzheng / articles / 9509792.html |
1 2 3 4 5 6 7 8 9 | url(r '^books/(\d{4})/' , views.year_books), #匹配年份的 url(r '^books/(\d{4})/(\d{1,2})/' , views.year_month_books), #匹配年份和月份的 # http://127.0.0.1:8000/books/2001/ 视图: def year_month_books(request,year,month): #位置参数,第一个参数接收的就是无名分组路径中匹配 到的第一个分组的数据,第二个参数接收的就是无名分组路径中匹配到的第二个分组的数据 print (year,month) # return render(request,'books.html') return HttpResponse(year + month) |
1 2 3 4 5 6 7 8 9 10 | # urls.py中 from django.conf.urls import url from . import views urlpatterns = [ url(r '^blog/$' , views.page), url(r '^blog/page(?P<num>[0-9]+)/$' , views.page), ] # views.py中,可以为num指定默认值 def page(request, num = "1" ): pass |
1 2 3 4 5 6 7 8 9 10 11 | 1 通过路由的别名,解析出路由的地址 url(r '/home/' ,views.home,name = 'home' ) 2 用在视图函数中: url = reverse( 'home' ) # home就是路由的别名 print (url) 3 模板文件中使用 { % url 'home' % } 4 有什么作用 - 动态根据路由别名获得路径,一旦路径改变,不需要改其他代码 |
1 2 3 4 5 | # urls.py path( 'index/<str:name' ,views.index, name = 'login' ) # 视图函数 url = = reverse( 'login' ,args = [ 'xxx' ]) # xxx 为字符串 url = = reverse( 'login' ,kwargs = { 'name' : 'xxx' }) # name为有名分组的名称 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 1 路由做反向解析时,有同名路由,出现问题 2 在做路由分发时,给每个app的路径设置一个名称空间 3 使用步骤 1 在总路由中设置 # include第二个参数app01: app的名字 namespace='名称空间的名字' # path('app01', include(('app01.urls','app01'),namespace='index')) path 设置 注意 app01后没有/ url(r '^app01' ,include(( 'app01.urls' , 'app01' ),namespace = 'index' )) - 2 子路由中: url(r '/index/' ,views.meinv,name = 'meinv' ) - 3 app01 views.py def meinv(request): url = reverse( 'index:meinv' ) # reverse('名称空间的名字:路由的别名') print (url) return render(request, 'index.html' ) - 3 模板文件中使用 index.html <a href = "{% url 'index:meinv' %}" >哈哈< / a> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Django默认支持以下 5 个转化器: str ,匹配除了路径分隔符( / )之外的非空字符串,这是默认的形式 int ,匹配正整数,包含 0 。 slug,匹配字母、数字以及横杠、下划线组成的字符串。 uuid,匹配格式化的uuid,如 075194d3 - 6885 - 417e - a8a8 - 6c931e272f00 。 path,匹配任何非空字符串,包含了路径分隔符( / )(不能用?) 2 例子 - path( 'login/<int:year>' , views.login), - path( 'login/<str:year>' , views.login), - path( 'login/<path:p>' , views.article), 3 高级例子 - 实现匹配这种路径:http: / / 127.0 . 0.1 : 8000 / liuqingzheng / p / 4444.html - path( '<str:name>/p/<int:id>.html' , views.article), - re_path(r '^(?P<name>.*?)/p/(?P<id>\d+).html$' , views.login), - url(r '^(?P<name>.*?)/p/(?P<id>\d+).html$' , views.login), # url在2.x以后不建议使用 4 转换器可以不可以在re_path中使用?不能!!!! |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 对于一些复杂或者复用的需要,可以定义自己的转化器。转化器是一个类或接口,它的要求有三点: 1.regex 类属性,字符串类型 2.to_python ( self , value) 方法,value是由类属性 regex 所匹配到的字符串,返回具体的Python变量值,以供Django传递到对应的视图函数中。 3.to_url ( self , value) 方法,和 to_python 相反,value是一个具体的Python变量值,返回其字符串,通常用于url反向引用。 例子: class FourDigitYearConverter: regex = '[0-9]{4}' def to_python( self , value): return int (value) def to_url( self , value): return '%04d' % value 使用register_converter 将其注册到URL配置中: from django.urls import register_converter, path from . import converters, views register_converter(converters.FourDigitYearConverter, 'yyyy' ) urlpatterns = [ path( 'articles/2003/' , views.special_case_2003), path( 'articles/<yyyy:year>/' , views.year_archive), ... ] |
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2020-08-27 Linux 五种IO模型