URLconf是一個python模塊,是一個URL模式(簡單的正則表達式)到python視圖(函數或者類)之間的映射python
url(regex,view,kwargs=None,name=None)
include(module,namespace=None,app_name=None) include(pattern_list) include((pattern_list,app_namespace),namespace=None) include((pattern_list,app_namespace,instance_namwespace))
實例:web
- 主urls.py from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^dashboard/',include('dashboard.urls')), url(r'^admin/',admin.site.urls) ] - dashboard.urls配置文件 from django.conf.urls import url,include from . import views urlpatterns = [ url(r'^user/',include([ url(r'^list/$',view.userlist,name='user_list'), url(r'^info/$',view.userinfo,name='user_linfo'), url(r'^modify/',include([ url(r'status/$',view.modifystatus,name='modify_status') ])) ])) ] - dashboard.views視圖 from django.shortcuts import render from django.http import HttpResponse # Create your views here. def index(request): return HttpResponse('Index Page') def userList(request): return HttpResponse("User List Page") def userStatus(request): return HttpResponse("User Status Page") def UserInfo(request): return HttpResponse("User Info Page") - 請求方式 curl http://192.168.33.10:8080/dashboard/user/user_list/ curl http://192.168.33.10:8080/dashboard/user/modify/status/ curl http://192.168.33.10:8080/dashboard/user/modify/info/
若要從URL中捕獲一個值,只須要在他周圍放置一對圓括號正則表達式
urlpatterns = [ url(r'^article/2003/$',views.special_case_2003,name='special_case_2003'), url(r'^article/(2004)/$',views.articleViewInfo,name='special_case_2003'), url(r'^user/([0-9]{4})/$',views.userInfo), url(r'^date/([0-9]{4})/([0-9]{2})/([0-9]{2})$',views.dateInfo) ]
對應的視圖函數django
def special_case_2003(request): return HttpResponse("2003") def articleViewInfo(request,*args,**kwargs): print(args) #位置參數獲取 return HttpResponse('request2004') def userInfo(request,*args,**kwargs): return HttpResponse(json.dumps(args)) def dateInfo(request,*args,**kwargs): data = {"year":args[0],"month":args[1],"day":args[2]} # return HttpResponse(json.dumps(data)) return JsonResponse(data)
語法 (?P<name>pattern) - name是傳給視圖參數的名字, - pattern是一個正則表達式,也是關鍵字參數的值
實例:json
url: url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$',views.articleInfoView) ------------------------- view視圖函數 def articleInfoView(request,*args,**kwargs): return JsonResponse(kwargs)
請求方式:http://192.168.33.10:8080/dashboard/articles/2004/12/21/app
URLconfs 具備一個鉤子,讓你傳遞一個Python 字典做爲額外的參數傳遞給視圖函數
django.conf.urls.url() 函數能夠接收一個可選的第三個參數,它是一個字典,表示想要傳遞給視圖函數的額外關鍵字參數框架
url: url(r'users/(?P<name>[a-z]+)',views.users,{'extra_args':'hehehe'}) view視圖函數: from django.conf.urls import url from . import views urlpatterns = [ url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}), ] 請求地址:/blog/2005/ 調用函數:views.year_archive(request, year='2005',foo='bar')
django給每一個URL取了一個名字,存儲每一個URL與name的映射關係
根據Django 視圖的標識和將要傳遞給它的參數的值,獲取與之關聯的URL。這種方式叫作反向解析URL、反向URL匹配、反向URL查詢或者簡單的URL反查
實例:curl
url: from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'), ] ----------------------- 視圖函數 from django.core.urlresolvers import reverse 模板: <a href="{% url 'news-year-artive' yearvar%}">{{ yaervar }}Archieve</a>