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

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

系統 1818 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條評論
主站蜘蛛池模板: 久久精品a| 国产成人精品曰本亚洲 | 国产高清视频在线免费观看 | 伊人久久大香线蕉综合bd高清 | 日本免费黄色录像 | 波多野结衣在线观看3人 | 久久精品日日躁夜夜躁欧美 | 国产手机在线视频放线视频 | 亚洲第一红杏精品久久 | 久久视频精品a线视频在线观看 | 亚洲一区免费视频 | 久久九色 | 国产中文字幕久久 | 福利视频网站 | s8国产成人精品视频 | 色久综合网 | 日韩中文字幕精品 | 日韩欧美中 | 俄罗斯毛片视频 | 欧美人猛交日本人xxx | 精品天海翼一区二区 | 天天躁狠狠躁夜夜躁 | 在线不卡日本 | 国产乱人免费视频 | 久久久久久久国产免费看 | 国内精品免费视频 | 久草在线国产视频 | 欧美在线视频7777kkkk | 99国产精品免费观看视频 | 国产精品国色综合久久 | 国产成人精品久久亚洲高清不卡 | 黄色在线免费网站 | 亚洲国产精品久久久久久网站 | 亚洲国产二区 | 九九99久麻豆精品视传媒 | 久草丁香 | 亚州中文字幕 | 国产成人精品免费视频网页大全 | 久久国内精品自在自线观看 | 日韩亚洲在线 | 国产尤物福利视频在线观看 |