路由系統

URLconf配置

from django.conf.urls import url

urlpatterns = [
     url(正則表達式, views視圖,參數,別名),
]

正則表達式: 正則字符串,匹配路徑正則表達式

views視圖: 視圖中的函數django

參數: 可選,要傳遞給視圖函數的默認參數,字典形式app

別名: 可選, name參數函數

 正則表達式

r'' 開頭url

最開始的/不用加spa

從上到下匹配,匹配成功就再也不繼續code

APPEND_SLASH

Django settings.py配置文件中默認沒有 APPEND_SLASH 這個參數,但 Django 默認這個參數爲 APPEND_SLASH = True。 其做用就是自動在網址結尾加'/'。blog

訪問 http://www.example.com/blog 時,默認將網址自動轉換爲 http://www.example/com/blog/路由

若是在settings.py中設置了 APPEND_SLASH=False,此時咱們再請求 http://www.example.com/blog 時就會提示找不到頁面。字符串

分組和命名分組

經過括號對正則表達式進行分組匹配,捕獲URL中的值而且以位置參數的形式傳給視圖,在視圖函數裏定義相應個數的形參就能夠

例: url(r'^blog/([0-9]{4})/([0-9]{2})/', views.blog,name='blog')

命名分組匹配的正則表達式來捕獲URL中的值而且以關鍵字參數的形式傳給視圖,視圖函數中必須使用和name相同的形參

例: url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.blog,name='blog')

 

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

 

include  路由分發

在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匹配規則定義別名,經過名字來調用當前的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'})     按照關鍵字參數的形式進行傳參

 

namespace   命名空間

在不一樣的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})
相關文章
相關標籤/搜索