亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python 之 Django框架(路由系統、include、命名URL和

系統 1623 0

12.36 Django的路由系統

基本格式:

            
              from
            
             django.conf.urls 
            
              import
            
            
               url
urlpatterns 
            
            =
            
               [
     url(正則表達式, views視圖函數,參數,別名),
]
?
正則表達式:   一個正則表達式字符串
views視圖函數:一個可調用對象,通常為一個視圖函數或一個指定視圖函數路徑的字符串
參數:        可選的要傳遞給視圖函數的默認參數(字典形式)
別名:        一個可選的name參數
            
          
12.361 路由正則表達式
            
              from
            
             django.conf.urls 
            
              import
            
            
               url

            
            
              from
            
             django.contrib 
            
              import
            
            
               admin

            
            
              from
            
             app01 
            
              import
            
            
               views
?
urlpatterns 
            
            =
            
               [
    url(r
            
            
              '
            
            
              ^admin/
            
            
              '
            
            
              , admin.site.urls),
    url(r
            
            
              '
            
            
              ^book_list/([0-9]{4})/(\d{2})
            
            
              '
            
            , views.book_list),
            
              #
            
            
              通過括號捕獲位置參數:(4位數字)、(2位數字)
            
            
              #
            
            
               publisher_list(request, x, y)
            
            
                  
    url(r
            
            
              '
            
            
              ^publisher_list/(?P
              
                [0-9]{4})/(?P
                
                  \d{2})
                
              
            
            
              '
            
            
              , views.publisher_list),
    
            
            
              #
            
            
               publisher_list(request, n, m)     #通過括號捕獲關鍵字參數
            
            
              #
            
            
              傳遞額外的參數給視圖函數(了解)
            
            
    url(r
            
              '
            
            
              ^demo1/([0-9]{4})/(\d{2})/$
            
            
              '
            
            , views.demo1, {
            
              "
            
            
              name
            
            
              "
            
            : 
            
              "
            
            
              egon
            
            
              "
            
            
              }),
    
            
            
              #
            
            
              可選的要傳遞給視圖函數的字典形式參數,如果字典的key和分組命名匹配沖突,則以字典形式的額外參數為準
            
            
              ?
    
            
            
              #
            
            
              view函數設置默認值參數  
            
            
    url(r
            
              '
            
            
              ^blog/$
            
            
              '
            
            , views.page),                
            
              #
            
            
              使用默認值num=1 
            
            
    url(r
            
              '
            
            
              ^blog/(?P
              
                [0-9]+)/$
              
            
            
              '
            
            , views.page), 
            
              #
            
            
              使用自己匹配到的值 
            
            
              ]

            
            
              #
            
            
               views.py中,可以為num指定默認值
            
            
              def
            
             page(request, num=
            
              "
            
            
              1
            
            
              "
            
            
              ):
    
            
            
              pass
            
          

1、urlpatterns中的元素按照書寫順序從上往下逐一匹配正則表達式,一旦匹配成功則不再繼續。 2、若要從URL中捕獲一個值,只需要在它周圍放置一對圓括號( 分組匹配 )。 3、不需要添加一個前導的反斜杠,因為每個URL 都有。例如,應該是^articles 而不是 ^/articles。 4、每個正則表達式前面的'r' 是可選的但是建議加上

注意:

            
              #
            
            
              是否開啟URL訪問地址后面不為'/'跳轉至帶有'/'的路徑的配置項
            
            
APPEND_SLASH=
            
              True

            
            
              #
            
            
              捕獲的參數永遠都是字符串
            
            
              
#
            
            
              分組匹配,分組命名匹配, 不能混著用
            
          
12.362 include其他的URLconfs
            
              from
            
             django.conf.urls 
            
              import
            
            
               include, url
urlpatterns 
            
            =
            
               [
   url(r
            
            
              '
            
            
              ^admin/
            
            
              '
            
            
              , admin.site.urls),
   url(r
            
            
              '
            
            
              ^app01/
            
            
              '
            
            , include(
            
              '
            
            
              app01.urls
            
            
              '
            
            )),  
            
              #
            
            
               可以包含其他的URLconfs文件
            
            
]
          
12.363 命名URL和URL反向解析
            url(r
            
              '
            
            
              ^home
            
            
              '
            
            , views.home, name=
            
              '
            
            
              home
            
            
              '
            
            ),          
            
              #
            
            
                給url匹配模式起別名為 home
            
            
url(r
            
              '
            
            
              ^index/(\d*)
            
            
              '
            
            , views.index, name=
            
              '
            
            
              index
            
            
              '
            
            ),  
            
              #
            
            
                給url匹配模式起名為index
            
          

在模板語言中根據別名找到url:

            
              #
            
            
              無參:
            
            
{% url 
            
              '
            
            
              home
            
            
              '
            
             %
            
              }

            
            
              #
            
            
              位置參數:
            
            
{% url 
            
              "
            
            
              home
            
            
              "
            
            
              "
            
            
              2019
            
            
              "
            
            
              "
            
            
              9
            
            
              "
            
             %
            
              }

            
            
              #
            
            
              關鍵字參數:
            
            
{% url 
            
              "
            
            
              home
            
            
              "
            
            
              "
            
            
              year
            
            
              "
            
            =2019 
            
              "
            
            
              month
            
            
              "
            
            =9 %}
          

在views.py中根據別名找到 url:

            
              from
            
             django.urls 
            
              import
            
            
               reverse

            
            
              from
            
             django.shortcuts 
            
              import
            
            
               redirect
?

            
            
              def
            
            
               redirect_to_year(request):
    year 
            
            = 2006
    
            
              #
            
            
              無參URL:reverse('別名')
            
            
              #
            
            
              位置參數:reverse("別名", args=("2018", ))
            
            
              #
            
            
              關鍵字參數:reverse("別名", kwargs={"k1":參數1, ...})
            
            
              return
            
             redirect(reverse(
            
              '
            
            
              news-year-archive
            
            
              '
            
            , args=
            
              (year,)))
    
            
            
              return
            
             redirect(reverse(
            
              '
            
            
              news-year-archive
            
            
              '
            
            , kargs={
            
              '
            
            
              year
            
            
              '
            
            :2006}))
          
12.364 命名空間模式

project中的urls.py:

            
              from
            
             django.conf.urls 
            
              import
            
            
               url, include
 
urlpatterns 
            
            =
            
               [
    url(r
            
            
              '
            
            
              ^app01/
            
            
              '
            
            , include(
            
              '
            
            
              app01.urls
            
            
              '
            
            , namespace=
            
              '
            
            
              app01
            
            
              '
            
            
              )),
    url(r
            
            
              '
            
            
              ^app02/
            
            
              '
            
            , include(
            
              '
            
            
              app02.urls
            
            
              '
            
            , namespace=
            
              '
            
            
              app02
            
            
              '
            
            
              )),
]
            
          

app01中的urls.py:

            
              from
            
             django.conf.urls 
            
              import
            
            
               url

            
            
              from
            
             app01 
            
              import
            
            
               views
 
app_name 
            
            = 
            
              '
            
            
              app01
            
            
              '
            
            
              
urlpatterns 
            
            =
            
               [
    url(r
            
            
              '
            
            
              ^(?P
              
                \d+)/$
              
            
            
              '
            
            , views.detail, name=
            
              '
            
            
              detail
            
            
              '
            
            
              )
]
            
          

app02中的urls.py:

            
              from
            
             django.conf.urls 
            
              import
            
            
               url

            
            
              from
            
             app02 
            
              import
            
            
               views
 
app_name 
            
            = 
            
              '
            
            
              app02
            
            
              '
            
            
              
urlpatterns 
            
            =
            
               [
    url(r
            
            
              '
            
            
              ^(?P
              
                \d+)/$
              
            
            
              '
            
            , views.detail, name=
            
              '
            
            
              detail
            
            
              '
            
            
              )
]
            
          

現在,兩個app中 url名稱重復了,反轉URL的時候就可以通過命名空間的名稱得到當前的URL

在模板語言中根據別名找到url:

            {% url 
            
              "
            
            
              命名空間:別名
            
            
              "
            
             參數1, 參數2... %
            
              }

            
            
              #
            
            
              無參:
            
            
{% url 
            
              '
            
            
              app01:detail
            
            
              '
            
             %
            
              }

            
            
              #
            
            
              位置參數:
            
            
{% url 
            
              "
            
            
              app01:detail
            
            
              "
            
            
              "
            
            
              2019
            
            
              "
            
            
              "
            
            
              9
            
            
              "
            
             %
            
              }

            
            
              #
            
            
              關鍵字參數:
            
            
{% url 
            
              '
            
            
              app01:detail
            
            
              '
            
             pk=12  %
            
              }
{
            
            % url 
            
              "
            
            
              app01:detail
            
            
              "
            
            
              "
            
            
              year
            
            
              "
            
            =2019 
            
              "
            
            
              month
            
            
              "
            
            =9 %}
          

在views.py中根據別名找到 url:

            
              from
            
             django.urls 
            
              import
            
            
               reverse

            
            
              from
            
             django.shortcuts 
            
              import
            
            
               redirect
?

            
            
              def
            
            
               redirect_to_year(request):
    year 
            
            = 2006
    
            
              #
            
            
              無參URL:reverse('命名空間:別名')
            
            
              #
            
            
              位置參數:reverse("命名空間:別名", args=(參數1, 參數2, ...))
            
            
              #
            
            
              關鍵字參數:reverse("命名空間:別名", kwargs={"k1":參數1, ...})
            
            
              return
            
             redirect(reverse(
            
              '
            
            
              app02:detail
            
            
              '
            
            , args=
            
              (year,)))
    
            
            
              return
            
             redirect(reverse(
            
              '
            
            
              app02:detail
            
            
              '
            
            , kwargs={
            
              '
            
            
              pk
            
            
              '
            
            :11}))
          

這樣即使app中URL的命名相同,也可以反轉得到正確的URL


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 尤物视频在线观看视频 | 奇米视频7777 | 欧美老司机 | 国产欧美成人免费观看视频 | 青草青青在线视频观看 | 免费在线观看黄色的网站 | 91久久精品国产一区二区 | 欧美一级成人一区二区三区 | 欧美激情一区二区三区中文字幕 | 美国一级毛片免费看成人 | 国产精品免费aⅴ片在线观看 | 夜夜操夜夜骑 | 一区二区三区在线播放视频 | 国语高清精品一区二区三区 | 欧美国产中文 | 国产视频中文字幕 | 国产在视频线在精品 | 国产成人精品日本亚洲语音1 | 奇米4色| 一级理论片免费观看在线 | 成人影院观看 | 色婷婷精品综合久久狠狠 | 国产精品片 | 欧美久草| 亚洲欧美日韩精品久久 | 老司机亚洲精品影院在线 | 一级骚片 | 99国内视频 | 九操网 | 色综合a怡红院怡红院首页 色综合h | 亚洲网在线观看 | 亚洲成人视| 国产大战女模特在线视频 | 又粗又硬又大久久久 | 国产成a人片在线观看视频99 | 手机看片福利永久国产日韩 | 国产一区私人高清影院 | 亚州综合激情另类久久久 | 一级高清毛片 | 人成午夜免费大片在线观看 | 国产成 人 综合 亚洲绿色 |