前言

昨天我們看到了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裡面延伸下去那麼遠,前面稍微探了探路發現在寫下去會有點多(絕對不是我偷懶),所以明天再繼續看吧!