zoukankan      html  css  js  c++  java
  • 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返回给浏览器。
  • 相关阅读:
    分布式共识协议RAFT基本原理
    slave_net_timeout, MASTER_HEARTBEAT_PERIOD, MASTER_CONNECT_RETRY,以及 MASTER_RETRY_COUNT设置和查看
    单例模式
    截取字符串Java
    Hibernate+struts+JqueryAjax+jSON实现无刷新三级联动
    数组集合区别
    Android Activity生命周期(图文)!
    Activity的生命周期
    Android四大组件
    各种时间获取 .net
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12817603.html
Copyright © 2011-2022 走看看