在前面的例子里面,我們已經(jīng)了解,Django里面可以通過(guò)在Project同名的那個(gè)目錄下的urls.py文件里面配置路由,根據(jù)用戶輸入的url,調(diào)用不同的函數(shù)或者類的方法。下面看看具體的一些例子。
單一的路由對(duì)應(yīng)關(guān)系。這種方式最直接,前面已經(jīng)多次出現(xiàn), 可以是fbv或者cbv類型的。
url(r'^login/', views.login) url(r'^home/', views.Home.as_view()),
基于正則表達(dá)式的路由關(guān)系。具體來(lái)說(shuō),也可以分成兩種:a. url(r'^detail-(\d+).html', views.detail) , 這里出現(xiàn)了一個(gè)分組(\d+),因此需要額外的再傳遞一個(gè)參數(shù)給detail這個(gè)函數(shù),如果多個(gè)分組的話,需要按照順序傳遞多個(gè)參數(shù)到detail函數(shù)b. url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail), 這里因?yàn)橹付薾id和uid,因此傳遞參數(shù)的時(shí)候也需要指明具體是傳遞給誰(shuí)的。c. 上面兩種情況都可以通過(guò)萬(wàn)能參數(shù)實(shí)現(xiàn) def detail(request, *args,**kwargs)
實(shí)戰(zhàn)模板:
url(r'^detail-(\d+)-(\d+).html', views.detail), def func(request, nid, uid): pass def func(request, *args): args = (2,9) def func(request, *args, **kwargs): args = (2,9) #-----------------------------我是分割線------------------------------------ url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail) def func(request, nid, uid): pass def funct(request, **kwargs): kwargs = {'nid': 1, 'uid': 3} def func(request, *args, **kwargs): args = (2,9)
給路由的映射設(shè)置名稱,這樣更方便調(diào)用。reverse方法可以通過(guò)name倒過(guò)來(lái)找url的路徑
url.py
url(r'^asdfasdfasdf/', views.index, name='i1'), url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'), url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),
view.py
def func(request, *args, **kwargs): from django.urls import reverse url1 = reverse('i1') # asdfasdfasdf/ url2 = reverse('i2', args=(1,2,)) # yug/1/2/ url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
xxx.html
{% url "i1" %} # asdfasdfasdf/ {% url "i2" 1 2 %} # yug/1/2/ {% url "i3" pid=1 nid=9 %} # buy/1/9/
多級(jí)app目錄進(jìn)行分類
如果存在多個(gè)app目錄,每個(gè)app目錄下面都可能存在同名的函數(shù)或者url,那么這種多級(jí)的路由方式,可以通過(guò)在主url文件中配置include指向各app目錄下的子url文件,然后在app各自的目錄下,再配置自己的url文件。
比如:
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^cmdb/', include("app01.urls")), url(r'^monitor/', include("app02.urls")), ]
url.py
urlpatterns = [ url(r'^login/', views.login), url(r'^index/', views.index), url(r'^user_info/', views.user_info), url(r'^userdetail-(?P<nid>\d+)/', views.user_detail), url(r'^userdel-(?P<nid>\d+)/', views.user_del), url(r'^useredit-(?P<nid>\d+)/', views.user_edit), url(r'^orm/', views.orm), ]
views.py
def user_info(request): if request.method == "GET": user_list = models.UserInfo.objects.all() group_list = models.UserGroup.objects.all() return render(request, 'user_info.html', {'user_list': user_list, "group_list": group_list}) elif request.method == 'POST': u = request.POST.get('user') p = request.POST.get('pwd') models.UserInfo.objects.create(username=u,password=p) return redirect('/cmdb/user_info/')
url.py
urlpatterns = [ url(r'^login/', views.login), ]
view.py
def login(request): return HttpResponse('APP02,login')
訪問(wèn)不同app下的效果
Url里面還可以設(shè)置默認(rèn)值,比如說(shuō)我們可以定義一個(gè)字典
url(r'^index/', views.index, {'name': 'root'}),
在index這個(gè)函數(shù)里面,我們就可以直接調(diào)用這個(gè)默認(rèn)值
def index(request,name): print(name) return HttpResponse('OK')
最后一個(gè)是命名空間,這個(gè)和前面的多級(jí)App分類剛好是反過(guò)來(lái)的。
比如,有兩個(gè)不同的Url都指向了同一個(gè)App
urls.py
/admin/ include('app01.urls',namespace='m1') /crm/ include('app01.urls',namespace='m2')
app01.urls
/index/ name = 'n1'
函數(shù)里面生成url的話,需要指定一條明確的路徑
reverser('m1:n1')
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
新聞標(biāo)題:Django路由系統(tǒng)簡(jiǎn)述-創(chuàng)新互聯(lián)
URL地址:http://chinadenli.net/article28/djgijp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站改版、電子商務(wù)、外貿(mào)建站、網(wǎng)站維護(hù)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容