標籤:pen 名稱空間 cut append pat 瀏覽器 war 修改 **kwargs
(69天為作業講解)路由無名分組
url(r‘^test/([0-9]{4})/([0-9]{2})‘, views.test)
- url為一個函數,第一個參數寫Regex
- 路由從上往下匹配,一旦匹配成功就不繼續向下走了
- 如果分多個組,相應的視圖函數就需要用多個參數接收,個數必須一致,或者使用*args
- 在setting裡設定:APPEND_SLASH=False,請求時,瀏覽器不會自動補全斜杠,帶上斜杠就匹配失敗
- 偽靜態,方便搜尋引擎收錄
有名分組
- url(r‘^test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})‘, views.test)
- 相應的視圖函數中的參數名字和個數必須一致,否則會報錯,位置可以顛倒
- 有名分組可以使用**kwargs接收
- 分組捕獲的參數,都是str類型
- 可以可以設定預設值
路由分發
- 先匯入from django.conf.urls import include
- url(r‘^app01/‘,include(‘app01.urls‘))
- 在相應的app裡建立urls.py檔案
- 檔案中的urlpatterns不能變名字,其他寫法與內建的相同
反向解析
1.路由中,命一個名,url(r‘^index/‘, views.index,name=‘n1‘)2.在視圖函數裡匯入from django.shortcuts import reverse # 拿到反向解析的url url = reverse(‘n1‘)3.在模板裡使用時: {% url ‘n1‘ %}4.帶位置參數的反向解析 url(r‘^index/([0-9]{4})/([0-9]{2})‘, views.index,name=‘n1‘) 在視圖中:url=reverse(‘n1‘,args=(2012,12,)) 在模板中:{% url ‘n1‘ 2012 12 %}5.帶關鍵字參數反向解析 url(r‘^index/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})‘, views.index,name=‘n1‘) 在視圖中: 方法一:url=reverse(‘n1‘,args=(2012,12,) 方法二:url=reverse(‘n1‘,kwargs={‘year‘=2012,‘month‘:12}) 在模板中: 方法一:{% url ‘n1‘ 2012 12 %} 方法二:{% url ‘n1‘ month=12 year=2012 %} 注意:按位置傳,順序必須是固定的作用:修改路由中url的時候,其它地方不需要改動
名稱空間(知道它,但是建議不同app的url裡name不能重名,app的名字_name)
主urls中 url(r‘^app01/‘, include(‘app01.urls‘,namespace=‘app01‘)), url(r‘^app02/‘, include(‘app02.urls‘,namespace=‘app02‘)),app01的urls中urlpatterns = [url(r‘^test‘,views.test3 ,name=‘test‘),]app02的urls中urlpatterns = [url(r‘^test02‘,views.test3 ,name=‘test‘),]在視圖函數中: url=reverse(‘app02:test‘)在模板中: <a href="{% url ‘app02:test‘ %}">點我跳到首頁</a>
python學習第七十天:路由