# url是個函數,有四個參數,第一個參數要傳正則表達式,第二參數傳函數內存地址,第三個參數傳默認參數,第四個是路由的別名
url(r'^liuqingzheng/article/aa.html$', views.test),
-路由從上往下匹配,一旦匹配成功,後面就不繼續匹配了html
url(r'^test2/(\d+)/(\w+)$', views.test2),
無名分組分出幾個值,視圖函數就要接受幾個值(位置參數形式傳過來的)python
寫一個無名分組路由,請求格式爲:article/2018/12,在瀏覽器界面顯示:您要查看2018年12月的文章正則表達式
url(r'^article/(\d+)/(\d+)$', app01_views.wuming),
def wuming(request,year,month):
print(year,month)
return HttpResponse('您要查看%s年%s月的文章' %(year,month))
url(r'^test3/(?P<id>\d+)/(?P<name>\w+)$', views.test3),
有名分組分出幾個值,視圖函數就要接受幾個值(按關鍵字傳入,位置能夠打亂)django
寫一個有名分組路由,請求格式爲:user/lqz,在瀏覽器界面顯示:您要查看名字爲lqz該人的信息瀏覽器
url(r'^user/(?P<name>\w+)$', app01_views.youming),
def youming(request,name):
print(name)
return HttpResponse('您要查看名字爲%s該人的信息' %(name))
# 默認是true,瀏覽器瀏覽的時候,默認加上斜槓
# 若是是False,瀏覽器默認不會加/
# APPEND_SLASH=Falseapp
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取執行函數
-新建app01,app02,
# -當用戶訪問app01/test/ 響應到app01的視圖函數test
# -當用戶訪問app02/test/ 響應到app02的視圖函數test
url(r'^app01/',include('app0108.urls')),
url(r'^app02/',include('app02.urls'))
幹什麼用?
-在視圖函數中重定向的地址原來是寫死的,若是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%}ui
# 1 當訪問'/user/'路徑時,重定向到'/userlist/'頁面
# 2 當訪問'/user/?id=10'路徑時,重定向到'/userlist/10'頁面
url(r'user/$',app01_views.user),
url(r'userlist/(\d+)?$',app01_views.userlist,name='userlist'),
# 3 在模板(html中)層經過反向解析,解析出'userlist/10'的的地址
url(r'^test$', app01_views.test),
def user(request):
id = request.GET.get('id')
print(id)
if id:
url=reverse('userlist',args=(id,))
else:
url=reverse('userlist')
print(url)
return redirect(url)
def userlist(request,id):
if id:
return HttpResponse('userlist:%s的頁面' % (id))
return HttpResponse('userlist ok')
def test(request):
return render(request,'test.html')
<body>
<p>app1-test</p>
<a href="{% url 'userlist' '10' %}">userlist</a>
</body>
-路由分發時,能夠指定名稱空間:
-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名_別名url
-1.幾的url就是2.幾的re_path
-2.0的path 第一個參數再也不是正則表達式
-5個轉換器:int,str,slug,path,uuidspa
-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'),