1. 程式人生 > >django的urls

django的urls

onf 反向解析 通過 val align 解析 個人 shortcut 繼續

1 路由的基本使用:
# url是個函數,有四個參數,第一個參數要傳正則表達式,第二參數傳函數內存地址,第三個參數傳默認參數,第四個是路由的別名
url(r‘^liuqingzheng/article/aa.html$‘, views.test),
-路由從上往下匹配,一旦匹配成功,後面就不繼續匹配了


2 路由的無名分組
url(r‘^test2/(\d+)/(\w+)$‘, views.test2),
無名分組分出幾個值,視圖函數就要接受幾個值(位置參數形式傳過來的)


3 路由的有名分組
url(r‘^test3/(?P<id>\d+)/(?P<name>\w+)$‘, views.test3),
有名分組分出幾個值,視圖函數就要接受幾個值(按關鍵字傳入,位置可以打亂)


4 有名和無名不能混著用


5 在settings中配置(以後項目,一般不用動)
# 默認是true,瀏覽器瀏覽的時候,默認加上斜杠
# 如果是False,瀏覽器默認不會加/
# APPEND_SLASH=False


6 路由分發
  1 導入include
  -from django.conf.urls import include
  2 在主路由中:
  url(r‘^app01/‘, include(‘app01.urls‘)),
  url(r‘^app02/‘, include(‘app02.urls‘)),
  3 在不同app中新建一個urls
  from app01 import views
  urlpatterns = [
  url(r‘^test/‘, views.test),
  ]
  4 如果瀏覽器輸入app01/test/,就會響應到app01下views中的test取執行

7 反向解析:
幹什麽用?
-在視圖函數中重定向的地址原來是寫死的,如果url地址變更,我需要所有的url都修改,很麻煩,所有可以通過反向解析,獲得url的地址
如何使用:
-路由層:
url(r‘^test_2/$‘, views.test2,name=‘test2‘),
-視圖層:
from django.shortcuts import reverse
url=reverse(‘url地址的別名‘)
#如果做了分組
url=reverse(‘url地址的別名‘,args=[],kwargs={})
-模板層:
{% url ‘url地址的別名‘%}
#如果做了分組
{% url ‘url地址的別名‘ 參數1 參數2%}

8 名稱空間
-路由分發時,可以指定名稱空間:
-url(r‘^app01/‘, include(‘app01.urls‘,namespace=‘app01‘)),
-url(r‘^app02/‘, include(‘app02.urls‘,namespace=‘app02‘)),

-在視圖中反向解析:
url=reverse(‘app01:test‘)
-在模板中反向解析:
{% url ‘app01:url地址的別名‘%}
-個人不建議這麽使用:
在不同app的urls中起別名的時候,添加:app名_別名


9 django 2.0的path,re_path(了解)
-1.幾的url就是2.幾的re_path
-2.0的path 第一個參數不再是正則表達式
-5個轉換器:int,str,slug,path,uuid
10 自定義轉換器(了解):
-1 寫一個類:
class MyCon:
regex = ‘[0-9]{4}‘
def to_python(self, value):
return int(value)
def to_url(self, value):
return ‘%04d‘ % value
-2 在urls中:
-from django.urls import register_converter
-register_converter(類名,‘別名‘)

-path(‘test/<別名:year>‘, views.test,name=‘year‘),

django的urls