黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

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

系統(tǒng) 1974 0

12.36 Django的路由系統(tǒng)

基本格式:

            
              from
            
             django.conf.urls 
            
              import
            
            
               url
urlpatterns 
            
            =
            
               [
     url(正則表達(dá)式, views視圖函數(shù),參數(shù),別名),
]
?
正則表達(dá)式:   一個(gè)正則表達(dá)式字符串
views視圖函數(shù):一個(gè)可調(diào)用對(duì)象,通常為一個(gè)視圖函數(shù)或一個(gè)指定視圖函數(shù)路徑的字符串
參數(shù):        可選的要傳遞給視圖函數(shù)的默認(rèn)參數(shù)(字典形式)
別名:        一個(gè)可選的name參數(shù)
            
          
12.361 路由正則表達(dá)式
            
              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),
            
              #
            
            
              通過(guò)括號(hào)捕獲位置參數(shù):(4位數(shù)字)、(2位數(shù)字)
            
            
              #
            
            
               publisher_list(request, x, y)
            
            
                  
    url(r
            
            
              '
            
            
              ^publisher_list/(?P
              
                [0-9]{4})/(?P
                
                  \d{2})
                
              
            
            
              '
            
            
              , views.publisher_list),
    
            
            
              #
            
            
               publisher_list(request, n, m)     #通過(guò)括號(hào)捕獲關(guān)鍵字參數(shù)
            
            
              #
            
            
              傳遞額外的參數(shù)給視圖函數(shù)(了解)
            
            
    url(r
            
              '
            
            
              ^demo1/([0-9]{4})/(\d{2})/$
            
            
              '
            
            , views.demo1, {
            
              "
            
            
              name
            
            
              "
            
            : 
            
              "
            
            
              egon
            
            
              "
            
            
              }),
    
            
            
              #
            
            
              可選的要傳遞給視圖函數(shù)的字典形式參數(shù),如果字典的key和分組命名匹配沖突,則以字典形式的額外參數(shù)為準(zhǔn)
            
            
              ?
    
            
            
              #
            
            
              view函數(shù)設(shè)置默認(rèn)值參數(shù)  
            
            
    url(r
            
              '
            
            
              ^blog/$
            
            
              '
            
            , views.page),                
            
              #
            
            
              使用默認(rèn)值num=1 
            
            
    url(r
            
              '
            
            
              ^blog/(?P
              
                [0-9]+)/$
              
            
            
              '
            
            , views.page), 
            
              #
            
            
              使用自己匹配到的值 
            
            
              ]

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

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

注意:

            
              #
            
            
              是否開啟URL訪問(wèn)地址后面不為'/'跳轉(zhuǎn)至帶有'/'的路徑的配置項(xiàng)
            
            
APPEND_SLASH=
            
              True

            
            
              #
            
            
              捕獲的參數(shù)永遠(yuǎn)都是字符串
            
            
              
#
            
            
              分組匹配,分組命名匹配, 不能混著用
            
          
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
            
          

在模板語(yǔ)言中根據(jù)別名找到url:

            
              #
            
            
              無(wú)參:
            
            
{% url 
            
              '
            
            
              home
            
            
              '
            
             %
            
              }

            
            
              #
            
            
              位置參數(shù):
            
            
{% url 
            
              "
            
            
              home
            
            
              "
            
            
              "
            
            
              2019
            
            
              "
            
            
              "
            
            
              9
            
            
              "
            
             %
            
              }

            
            
              #
            
            
              關(guān)鍵字參數(shù):
            
            
{% url 
            
              "
            
            
              home
            
            
              "
            
            
              "
            
            
              year
            
            
              "
            
            =2019 
            
              "
            
            
              month
            
            
              "
            
            =9 %}
          

在views.py中根據(jù)別名找到 url:

            
              from
            
             django.urls 
            
              import
            
            
               reverse

            
            
              from
            
             django.shortcuts 
            
              import
            
            
               redirect
?

            
            
              def
            
            
               redirect_to_year(request):
    year 
            
            = 2006
    
            
              #
            
            
              無(wú)參URL:reverse('別名')
            
            
              #
            
            
              位置參數(shù):reverse("別名", args=("2018", ))
            
            
              #
            
            
              關(guān)鍵字參數(shù):reverse("別名", kwargs={"k1":參數(shù)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
            
            
              '
            
            
              )
]
            
          

現(xiàn)在,兩個(gè)app中 url名稱重復(fù)了,反轉(zhuǎn)URL的時(shí)候就可以通過(guò)命名空間的名稱得到當(dāng)前的URL

在模板語(yǔ)言中根據(jù)別名找到url:

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

            
            
              #
            
            
              無(wú)參:
            
            
{% url 
            
              '
            
            
              app01:detail
            
            
              '
            
             %
            
              }

            
            
              #
            
            
              位置參數(shù):
            
            
{% url 
            
              "
            
            
              app01:detail
            
            
              "
            
            
              "
            
            
              2019
            
            
              "
            
            
              "
            
            
              9
            
            
              "
            
             %
            
              }

            
            
              #
            
            
              關(guān)鍵字參數(shù):
            
            
{% url 
            
              '
            
            
              app01:detail
            
            
              '
            
             pk=12  %
            
              }
{
            
            % url 
            
              "
            
            
              app01:detail
            
            
              "
            
            
              "
            
            
              year
            
            
              "
            
            =2019 
            
              "
            
            
              month
            
            
              "
            
            =9 %}
          

在views.py中根據(jù)別名找到 url:

            
              from
            
             django.urls 
            
              import
            
            
               reverse

            
            
              from
            
             django.shortcuts 
            
              import
            
            
               redirect
?

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

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論