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返回给浏览器。
复制代码

 

posted @   梁劲雄  阅读(619)  评论(0编辑  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
阅读排行:
· 2025成都.NET开发者Connect圆满结束
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析
点击右上角即可分享
微信分享提示