昨天我們看到了print ORM回傳的值,實際上會去觸發到SQL,那正常在使用的情況下又是什麼時候被觸發的呢!?根據debug toolbar和logging可以看到是render的時候被觸發的!那我們就來看看render有什麼特別的吧!
在進去看render之前,我們先觀察一下render
在vscode中滑鼠一指過去就可以看到相關參數和說明~
那我們的todo看其來是對應到context
那我們就進去看看吧!
render to string,很淺顯易懂呢!
接著看
我們的template_name是字串所以看get
會看到他會先去拿engine
就來看看engine.all()是什麼東西吧!
這邊有個for迴圈對self,那看來又是老朋友magic method了~
這邊使用到的magic method有兩個
__iter__
再看看templates
大致看一下會去讀取settings.py中的TEMPLATES內容,在runserver的時候就讀取然後cache住了
__getitem__
getitem會去把剛剛讀取settings.py的TEMPLATES中的BACKEDN import進來
那這邊就會是engines list的結果
我們回到這邊
接著要看的就是這個engine的get_template function了~
這邊可以看到又傳給一個engine的get_template function
今天就先到這邊,明天繼續!
沒想到render裡面延伸下去那麼遠,前面稍微探了探路發現在寫下去會有點多(絕對不是我偷懶),所以明天再繼續看吧!