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返回给浏览器。

猜你喜欢

转载自www.cnblogs.com/python-daxiong/p/12817603.html
今日推荐