1. 程式人生 > >python學習第七十天:路由

python學習第七十天:路由

瀏覽器 需要 寫法 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學習第七十天:路由