Django4.0 編寫更多視圖

2022-03-12 11:13 更新

現(xiàn)在讓我們向 ?polls/views.py? 里添加更多視圖。這些視圖有一些不同,因?yàn)樗麄兘邮諈?shù):

def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)

def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResponse(response % question_id)

def vote(request, question_id):
    return HttpResponse("You're voting on question %s." % question_id)

把這些新視圖添加進(jìn) ?polls.urls? 模塊里,只要添加幾個(gè) ?url()? 函數(shù)調(diào)用就行:

from django.urls import path

from . import views

urlpatterns = [
    # ex: /polls/
    path('', views.index, name='index'),
    # ex: /polls/5/
    path('<int:question_id>/', views.detail, name='detail'),
    # ex: /polls/5/results/
    path('<int:question_id>/results/', views.results, name='results'),
    # ex: /polls/5/vote/
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

然后看看你的瀏覽器,如果你轉(zhuǎn)到 "/polls/5/" ,Django 將會(huì)運(yùn)行 ?detail()? 方法并且展示你在 URL 里提供的問題 ID。再試試 "/polls/5/results/" 和 "/polls/5/vote/" ——你將會(huì)看到暫時(shí)用于占位的結(jié)果和投票頁。

當(dāng)某人請(qǐng)求你網(wǎng)站的某一頁面時(shí)——比如說, "/polls/5/" ,Django 將會(huì)載入 ?mysite.urls? 模塊,因?yàn)檫@在配置項(xiàng) ?ROOT_URLCONF中設(shè)置了。然后 Django 尋找名為 ?urlpatterns變量并且按序匹配正則表達(dá)式。在找到匹配項(xiàng) ?'polls/'?,它切掉了匹配的文本(?"polls/"?),將剩余文本——?"5/"?,發(fā)送至 'polls.urls' URLconf 做進(jìn)一步處理。在這里剩余文本匹配了 ?'<int:question_id>/'?,使得我們 Django 以如下形式調(diào)用 ?detail()?:

detail(request=<HttpRequest object>, question_id=34)

問題 ?question_id=34? 來自 ?<int:question_id>?。使用尖括號(hào) "獲得" 網(wǎng)址部分后發(fā)送給視圖函數(shù)作為一個(gè)關(guān)鍵字參數(shù)。字符串的 ?question_id? 部分定義了要使用的名字,用來識(shí)別相匹配的模式,而 ?int部分是一種轉(zhuǎn)換形式,用來確定應(yīng)該匹配網(wǎng)址路徑的什么模式。冒號(hào) (:) 用來分隔轉(zhuǎn)換形式和模式名。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)