為什么我需要在render()中給出html檔案名 - 我已經在django的urls.py專案檔案中設定了url
urls.py
url('view-books',views.viewBooks)
views.py
def viewBooks(request):
books=models.Book.objects.all()
res=render(request,'BRMapp/view_book.html',{'books':book})
為什么我不能給在渲染view-books?
uj5u.com熱心網友回復:
我認為你有打字錯誤
def viewBooks(request) 。
books=models.Book.objects.all()
context = {"books":book}。
return render(request,'BRMapp/view_book.html', context)
你的問題是為什么在render中需要html檔案名,因為render是一個函式,它需要3個引數,第一個是request,第二個是 "html檔案的路徑",第三個是context
。進一步解釋一下
你是否對django的作業有基本的了解,首先你在render中沒有給出url,你給出的是render的路徑,也就是render的模板。 django遵循mvc模式,你在上面讀過,但是為了簡化,url只是有路由任務,他們只是在那里過濾路由,而不是在url中做任何事情,你可以給出3個引數,其中兩個是必須的,第一個是路徑,它認識到采取行動的時候到了,第二個是函式名,指導他去哪里,然后其函式有責任處理資料。uj5u.com熱心網友回復:
不幸的是,你的視圖中沒有回傳任何東西。所以你需要在你的函式中加入return:
def viewBooks(request)。
books=models.Book.objects.all()
return render(request,'BRMapp/view_book.html'/span>, {'books'/span>:books})
你可能想看看這個教程。
。uj5u.com熱心網友回復:
https://yourwebsite/view-book與BRMapp/view_book.html不一樣,Django需要知道一個對應于另一個。
Django中的路由是這樣作業的:
urls.py中查看你的urls,尋找符合請求的path。
view-books,該路徑有一個view。視圖只是一個函式(viewBooks()),Django會執行它。
viewBooks()的return行中用手寫出整個頁面,但這并不方便,所以你可以告訴Django從一個template開始,為你制作頁面。要做到這一點,你需要呼叫render()。
render()所做的是使用模板并替換所有需要替換的部分,以便用戶看到它。但要知道初始內容是什么樣子的,它需要從某個地方讀取它,那就是HTML檔案BRMapp/view_book.html.這個HTML檔案不需要和視圖有相同的名字,你可以把它叫做foobar.html,它也會有同樣的效果。但是不管它的名字是什么,你需要告訴Django你想使用一個檔案(render()告訴Django),并且你需要告訴Django這個檔案在哪里。你會在不同的地方有許多不同的檔案,并有不同的名字,而且可能發生的情況是,你在不同的目錄中有相同的名字的模板,所以Django不會試圖猜測你想要哪一個:你必須把它的路徑放在render()里面,以便Django知道從哪里開始構建頁面。
如果你給render()提供了URL,而不是檔案的路徑,Django將進入第5點,然后再回到第1點,以弄清該URL的含義,如此反復,直到永遠。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/323512.html
標籤:
