python學習第七十天:路由
阿新 • • 發佈:2018-09-04
瀏覽器 需要 寫法 rev app mes eve 導入 views
(69天為作業講解)
路由
無名分組
url(r‘^test/([0-9]{4})/([0-9]{2})‘, views.test)
- url為一個函數,第一個參數寫正則表達式
- 路由從上往下匹配,一旦匹配成功就不繼續向下走了
- 如果分多個組,相應的視圖函數就需要用多個參數接收,個數必須一致,或者使用*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學習第七十天:路由