day108-django-路由分发、动态路由、伪静态、根据名称反向生成url
1.路由分发:用于大项目,大项目分为很多小项目:app01,app02...... http://127.0.0.1:8000/app01/index/ urls.py from django.contrib import admin from django.urls import path,include #记得导入include urlpatterns = [ # path('admin/', admin.site.urls), path('app01/', include('app01.urls')),#匹配http://127.0.0.1:8000/app01/index/中的app01 path('app02/', include('app02.urls')), path('app03/', include('app03.urls')), ] app01文件夹的urls.py from django.contrib import admin from django.urls import path from app01 import views urlpatterns = [ # path('admin/', admin.site.urls), path('index/', views.index),#匹配http://127.0.0.1:8000/app01/index/中的index path('add/', views.add), ] app02文件夹的urls.py ... 2.动态路由: path不可以使用正则表达式,而re_path和url可以。 2.1 re_path #网页http://127.0.0.1:8000/index/fasdf7/8985eu.html from django.urls import path,re_path urlpatterns = [ #以index开头,以html结束,w+是匹配字母数字下划线 re_path('^index/(\w+)/(\w+).html$',index), ] 位置参数:'^index/(\w+)/(\w+).html$' 前面的w+传给a1,后面的w+传给a2,按顺序传参。 def index(request,a1,a2): return HttpResponse('abc') 关键字参数:'^index/(?P<a1>\w+)/(?P<a2>\w+).html$' 前面的w+传给a1,后面的w+传给a2,按关键字传参。 def index(request,a1,a2): return HttpResponse('abc') 2.2 url 用法跟re_path一样,可参考上面代码。 from django.conf.urls import url urlpatterns = [ url('^index/(\w+)/(\w+).html$',index), ] 3.伪静态 re_path('^index/(\w+)/(\w+).html$',index), 静态网站:内容固定,不用到数据库里面获取数据就直接返回html,访问速度比较快。 url路径最后添加html就是伪静态,实际上很多网站(服务器)都是从数据库中获取数据的, 而最后添加html为了提高seo排名,优化搜索。 4.根据名称反向生成url,用于设置权限。 4.1 设置位置参数 urlpatterns = [ re_path('^index/(\w+)/(\w+).html$',index,name='ind'),#name='ind'是名称 ] def index(request,a1,a2): #v = reverse('ind',a1,a2)是获取url v = reverse('ind',args=('abc','def'))#设置参数,args是元祖,a1对应abc,a2对应def print(v) # /index/abc/def.html return HttpResponse('abc') 4.2 设置关键字参数 urlpatterns = [ re_path('^index/(?P<a1>\w+)/(?P<a2>\w+).html$',index,name='ind'), ] def index(request,a1,a2): v = reverse('ind',kwargs={'a1':'abc','a2':'def'})#设置参数 print(v) # /index/abc/def.html return HttpResponse('abc') 4.3 模板替换 urlpatterns = [ re_path('^index/(?P<a1>\w+)/(?P<a2>\w+).html$',index,name='ind'), ] def index(request,a1,a2): return render(request,'index.html',{'a1':a1,'a2':a2}) index.html里的特殊字符 {% url 'ind' a1 a2 %} 输入 http://127.0.0.1:8000/index/111/222.html 返回 /app01/index/111/222.html 可以在函数里面利用reverse反向生成url,然后放在列表里面, 最后把这个列表替换到模板里面进行for循环拿到所有url返回给浏览器。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· dotnet 9 通过 AppHostRelativeDotNet 指定自定义的运行时路径
· 如何统计不同电话号码的个数?—位图法
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 用c#从头写一个AI agent,实现企业内部自然语言数据统计分析
· 三维装箱问题(3D Bin Packing Problem, 3D-BPP)
· Windows上,10分钟构建一个本地知识库
· 使用 AOT 编译保护 .NET 核心逻辑,同时支持第三方扩展
· Java虚拟机代码是如何一步一步变复杂且难以理解的?