from django.conf.urls import url urlpatterns = [ url(正則表達式, views視圖,參數,別名), ]
正則表達式: 正則字符串,匹配路徑正則表達式
views視圖: 視圖中的函數django
參數: 可選,要傳遞給視圖函數的默認參數,字典形式app
別名: 可選, name參數函數
r'' 開頭url
最開始的/不用加spa
從上到下匹配,匹配成功就再也不繼續code
Django settings.py配置文件中默認沒有 APPEND_SLASH 這個參數,但 Django 默認這個參數爲 APPEND_SLASH = True。 其做用就是自動在網址結尾加'/'。blog
路由
字符串
經過括號對正則表達式進行分組匹配,捕獲URL中的值而且以位置參數的形式傳給視圖,在視圖函數裏定義相應個數的形參就能夠
例: url(r'^blog/([0-9]{4})/([0-9]{2})/', views.blog,name='blog')
命名分組匹配的正則表達式來捕獲URL中的值而且以關鍵字參數的形式傳給視圖,視圖函數中必須使用和name相同的形參
URLconf 在請求的URL上查找,捕獲的永遠都是字符串,不包括GET和POST參數以及域名,全部的請求方法都將路由到相同的函數
# urls from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^blog/$', views.page), url(r'^blog/page(?P<num>[0-9]+)/$', views.page), ] # views函數中,能夠爲num指定默認值 def page(request, num="1"): pass
在urls文件中,能夠包含其餘的URLconfs文件(有多個app文件,能夠看作一級目錄,二級目錄)
from django.conf.urls import include, url urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^blog/', include('app02')), # 能夠包含其餘的URLconfs文件 ]
給URL匹配規則定義別名,經過名字來調用當前的URL
命名
url(r'^home', views.home, name='home'), # 給url匹配模式起名爲home
使用
# 在模板中使用 {% url 'home' %} # 返回一個完成的url # 在py文件中使用(views文件) from django.urls import reverse reverse('home')
命名
url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog,name='blog' )
使用
# 在模板中使用 {% url 'blog' '2019' '04' %} 位置參數傳參 -----/blog/2019/04
# 在py文件中使用(views文件) from django.urls import reverse reverse('blog',args=('2019','04')) -----/blog/2019/04
命名
url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog,name='blog' )
使用
# 在模板中使用 {% url 'blog' '2019' '04' %} 能夠按照和分組同樣的形式進行傳參 {% url 'blog' year='2019' month='04' %} 按照關鍵字參數的形式進行傳參 # 在py文件中使用(views文件) from django.urls import reverse reverse('blog',args=('2019','04')) 按照位置參數的形式進行傳參 reverse('blog',kwargs={year:'2019',month:'04'}) 按照關鍵字參數的形式進行傳參
在不一樣的app文件中,可能會出現url名稱重複的現象,能夠使用namespace,翻轉URL時經過命名空間的名稱獲得當前的URL
例: 在app01和app02的url文件中,都有detail名稱
from django.conf.urls import url, include urlpatterns = [ url(r'^app01/', include('app01.urls', namespace='app01')), url(r'^app02/', include('app02.urls', namespace='app02')), ]
使用
# 在模板中使用 {% url 'app01:detail' pk=12 pp=99 %} # 在py文件中使用 reverse('app01:detail', kwargs={'pk':11})