簡單介紹Python的Django架構載入模版的方式

來源:互聯網
上載者:User
一般說來,你會把模板以檔案的方式儲存在檔案系統中,但是你也可以使用自訂的 template loaders 從其他來源載入模板。

Django有兩種方法載入模板

  1. django.template.loader.get_template(template_name) : get_template 根據給定的模板名稱返回一個已編譯的模板(一個 Template 對象)。 如果模板不存在,就觸發 TemplateDoesNotExist 的異常。
  2. django.template.loader.select_template(template_name_list) : select_template 很像 get_template ,不過它是以模板名稱的列表作為參數的。 它會返回列表中存在的第一個模板。 如果模板都不存在,將會觸發TemplateDoesNotExist異常。

預設情況下這些函數使用 TEMPLATE_DIRS 的設定來載入模板。 但是,在內部這些函數可以指定一個模板載入器來完成這些繁重的任務。

一些載入器預設被禁用,但是你可以通過編輯 TEMPLATE_LOADERS 設定來啟用它們。 TEMPLATE_LOADERS 應當是一個字串的元組,其中每個字串都表示一個模板載入器。 這些模板載入器隨Django一起發布。

django.template.loaders.filesystem.load_template_source : 這個載入器根據 TEMPLATE_DIRS 的設定從檔案系統載入模板。它預設是可用的。

django.template.loaders.app_directories.load_template_source : 這個加 載器從檔案系統上的Django應用中載入模板。 對 INSTALLED_APPS 中的每個應用,這個載入器會尋找templates 子目錄。 如果這個目錄存在,Django就在那裡尋找模板。

這意味著你可以把模板和你的應用一起儲存,從而使得Django應用更容易和預設範本一起發布。 例如,如果 INSTALLED_APPS 包含 ('myproject.polls','myproject.music') ,那麼 get_template('foo.html') 會按這個順序尋找模板:

    /path/to/myproject/polls/templates/foo.html    /path/to/myproject/music/templates/foo.html

請注意載入器在首次被匯入的時候會執行一個最佳化: 它會緩衝一個列表,這個列表包含了 INSTALLED_APPS 中帶有 templates 子目錄的包。

這個載入器預設啟用。

django.template.loaders.eggs.load_template_source : 這個載入器類似 app_directories ,只不過它從Python eggs而不是檔案系統中載入模板。 這個載入器預設被禁用;如果你使用eggs來發布你的應用,那麼你就需要啟用它。 Python eggs可以將Python代碼壓縮到一個檔案中。

Django按照 TEMPLATE_LOADERS 設定中的順序使用模板載入器。 它逐個使用每個載入器直至找到一個匹配的模板。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.