django 2 1官方文件翻譯 模板(進行中)

2021-09-01 14:14:25 字數 3497 閱讀 4105

django的官方文件在transifex上翻譯,本來想貢獻一下,結果發現那個介面實在是受不了。自己翻吧

模板作為乙個web框架,django需要一種動態生成html的便捷方式。最常見的方法是使用模板。模板包含html輸出的靜態部分以及能插入動態內容的一些特殊語法。有關使用模板建立html頁面的例項,請參閱教程3。

django專案可以配置乙個或多個模板引擎(甚至你可以不使用模板從零開始建立html)。django有乙個自己的內建模板系統,django template language(dtl),或者你可以使用乙個流行的模板系統jinja2來替換它。也可以使用從第三方獲得的其他模板。

無論後端如何處理,django定義了乙個標準api,用於載入和渲染模板。載入由兩步組成,1.查詢給定的識別符號。2.預處理,把它編譯成乙個記憶體中的形式。渲染意味著使用上下文資料插入模板並返回結果字串。

由於歷史原因,模板引擎的通用支援和django模板語言的實現都存在於django.template 模組中。

警告使用不受信任的作者建立的模板並不安全。例如,站點不應允許使用者提供自己的模板,因為模板作者可能執行諸如執行xss攻擊、訪問可能包含敏感資訊的模板變數屬性之類的操作。

模板引擎的支援

配置模板引擎可以使用settings中的templates來指定。這是乙個配置列表,列表的每一項對應乙個引擎。預設是空的。startproject生成的 settings.py產生乙個有用的值:

templates = [,},

]

backend是乙個用.分割的python路徑,描述了模板引擎類所在的位置,這個類提供了django的模板backend api。內建的backend有 django.template.backends.django.djangotemplates和django.template.backends.jinja2.jinja2。

由於大多數引擎從檔案載入模板,因此每個引擎的頂級配置包含兩個常用設定:

雖然不常見,但同一模板backend可以搞幾個不同的例項。在這種情況下,應該為每個例項新建乙個列表項。

options 包含backend-specific的設定。

使用方法

django.template.loader模組定義了載入模板的兩個函式

get_template(template_name,using = none)

此函式使用給定的名稱載入模板並返回乙個 template物件。

返回值的確切型別取決於使用的backend。每個backend都有自己的template類。

get_template()按順序嘗試每個模板引擎,直到成功。如果找不到模板,則會引起乙個 templatedoesnotexist異常。如果找到模板但其中包含無效語法,則會引起乙個 templatesyntaxerror異常。

如何搜尋和載入模板取決於每個引擎自己的backend和配置。

如果你要使用特定的模板引擎,請在using引數中傳遞引擎name。

select_template(template_name_list, using=none)

select_template()和get_template()差不多,但是它接受乙個模板名稱的列表。它按順序嘗試每個名稱並返回能找到的第乙個模板。

如果載入模板失敗,可能引起django.template中定義的兩個異常 :

exception templatedoesnotexist(msg, tried=none, backend=none, chain=none)

無法找到模板時引發此異常。它接受以下可選引數,用於在除錯頁面上填充template postmortem:

backend

發生異常的模板後端例項。

tried

查詢模板時嘗試的源位置列表。被格式化為乙個列表,每個列表項為包含(origin, status)的元組,其中origin是origin-like的物件,status 是乙個描述了為什麼沒找到模板的字串。

chain

templatedoesnotexist 嘗試載入模板時引發的中間異常列表。這是給一些函式比如get_template用的,當get_template嘗試從多個引擎載入給定模板時用的到。

/*譯註:可以嘗試一下load乙個不存在的模板名,會發現template postmortem塊的資訊

template-loader postmortem

django tried loading these templates, in this order:

using engine django:

django.template.loaders.filesystem.loader: /home/songyf/desktop/auth/templates/indx.html (source does not exist)

chain	[templatedoesnotexist('indx.html',)]

engine engines

template_name 'indx.html'

using none

異常 templatesyntaxerror(msg)

找到模板但包含錯誤時會引發此異常。

返回的template物件必須接著使用乙個render()方法:

template.render(context = none,request = none)

在給定的上下文中呈現此模板。

context必須是乙個dict,如果沒提供,引擎會用乙個空的上下文渲染模板。

request必須是乙個httprequest。然後引擎必須在模板中提供它以及csrf令牌。如何實現這一目標取決於不同的backend。

展示搜尋演算法的乙個例子。比如 templates設定為:

templates = [,,

]

如果你呼叫 get_template(『story_detail.html』), django會這麼尋找:

如果你呼叫select_template([『story_253_detail.html』, 『story_detail.html』]), django會這麼找:

當django找到存在的模板時,它會停止查詢。

tips:

您可以使用select_template()進行更靈活的模板載入。例如,如果您撰寫了新聞報道並希望某些故事具有自定義的模板,請使用類似這樣的函式:select_template([『story_%s_detail.html』 % story.id, 『story_detail.html』]) 。這將允許您為單個故事使用自定義模板,並為沒有自定義模板的故事提供後備模板。

盡可能在每個包含模板的資料夾中用乙個子資料夾組織模板 。慣例是為每個django應用程式建立乙個子目錄,並根據需要在這些子目錄中包含子目錄。

這樣做是為了你自己好。將所有模板儲存在根目錄會變得很混亂。

要載入子目錄中的模板,只需使用斜槓,如下所示:

get_template('news/story_detail.html')

Django 2 0 官方文件翻譯

from django.contrib import admin from django.urls import include,path urlpatterns path polls include polls.urls path admin admin.site.urls path 函式有四個引...

Django2 1 內建分頁器

官方文件參考 python提供了內建分頁類,裡面封裝了一些屬性和方法,大大簡化了我們自定義的時間和精力,這個類位於django core paginator.py。from django.core.paginator import paginator from django.core.paginat...

Django 2 1入門教程(六)

在polls目錄下建立static目錄,django將自動從此目錄下查詢靜態檔案。建立polls static polls style.css如下 li a在polls templates polls index.html中新增如下 其中的模板標籤生成靜態檔案的絕對路徑。此時訪問http local...