日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統 1828 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條評論
主站蜘蛛池模板: 曲水县| 郓城县| 德惠市| 徐州市| 望谟县| 南岸区| 镇安县| 永寿县| 新余市| 正定县| 永川市| 龙岩市| 石景山区| 岳普湖县| 丰城市| 保靖县| 西吉县| 洞头县| 沈丘县| 大姚县| 喀什市| 盘山县| 万年县| 义乌市| 昔阳县| 呼伦贝尔市| 安阳市| 醴陵市| 噶尔县| 达孜县| 郓城县| 清原| 山西省| 额敏县| 揭阳市| 辉南县| 石棉县| 新昌县| 安乡县| 卓资县| 曲水县|