iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
自我挑戰組

打掉重練!Django的還債之旅~系列 第 24

Day24. render~我渲~

  • 分享至 

  • xImage
  •  

前言

昨天我們看到了print ORM回傳的值,實際上會去觸發到SQL,那正常在使用的情況下又是什麼時候被觸發的呢!?根據debug toolbar和logging可以看到是render的時候被觸發的!那我們就來看看render有什麼特別的吧!

正題

在進去看render之前,我們先觀察一下render
https://ithelp.ithome.com.tw/upload/images/20231009/20162905nq3uJmG0fc.png
在vscode中滑鼠一指過去就可以看到相關參數和說明~
那我們的todo看其來是對應到context
那我們就進去看看吧!
https://ithelp.ithome.com.tw/upload/images/20231009/20162905rQCuQ7EX3m.png
render to string,很淺顯易懂呢!
接著看
https://ithelp.ithome.com.tw/upload/images/20231009/20162905PovzIovvZK.png
我們的template_name是字串所以看get
https://ithelp.ithome.com.tw/upload/images/20231009/20162905YcVouRP4zQ.png
會看到他會先去拿engine
https://ithelp.ithome.com.tw/upload/images/20231009/20162905wSVgHBBXV4.png
就來看看engine.all()是什麼東西吧!
https://ithelp.ithome.com.tw/upload/images/20231009/20162905PQYNeyACEw.png
這邊有個for迴圈對self,那看來又是老朋友magic method了~
這邊使用到的magic method有兩個

一個是__iter__

https://ithelp.ithome.com.tw/upload/images/20231009/20162905kIXL4E1Oad.png
再看看templates
https://ithelp.ithome.com.tw/upload/images/20231009/20162905d6Ac3J4t0k.png
大致看一下會去讀取settings.py中的TEMPLATES內容,在runserver的時候就讀取然後cache住了

另一個是__getitem__

https://ithelp.ithome.com.tw/upload/images/20231009/20162905WS8iGBTxCg.png
getitem會去把剛剛讀取settings.py的TEMPLATES中的BACKEDN import進來
https://ithelp.ithome.com.tw/upload/images/20231009/20162905lCftbiLzfb.png
那這邊就會是engines list的結果

我們回到這邊
https://ithelp.ithome.com.tw/upload/images/20231009/20162905RI7Ax2Z0Tn.png
接著要看的就是這個engine的get_template function了~
https://ithelp.ithome.com.tw/upload/images/20231009/20162905vTmTfaAvZ5.png
這邊可以看到又傳給一個engine的get_template function
https://ithelp.ithome.com.tw/upload/images/20231009/20162905VMgnWxwWjQ.png

今天就先到這邊,明天繼續!

結語

沒想到render裡面延伸下去那麼遠,前面稍微探了探路發現在寫下去會有點多(絕對不是我偷懶),所以明天再繼續看吧!


上一篇
Day23. ORM觸發SQL的地方(這邊是print~)
下一篇
Day25. render到engine,處理一堆東西~
系列文
打掉重練!Django的還債之旅~30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言