提供者:Python世界:杜文山 (http://www.dohao.org/python)
文檔模板標記語(yǔ)言(DTML)是一種便捷的內置于Zope中的模板和表現語(yǔ)言。這個(gè)文檔涉及所有的DTML標記符和它們的使用方法。
call標記符使你能夠調用一個(gè)方法而不把結果插入到DTML。
句法
call標記符句法:
<dtml-call Variable|expr=”Expression”>
如果call標記符使用一個(gè)變量,DTML自動(dòng)傳遞方法的參數——就像var標記符那樣。如果在一個(gè)表達式里指定方法,那么你必須親自傳遞參數。
例子
用變量名稱(chēng)調用:
<dtml-call UpdateInfo>
它調用UpdateInfo 對象,自動(dòng)傳遞參數。
用表達式調用:
<dtml-call expr=”RESPONSE.setHeader(‘content-type’, ‘text/plain’)”>
參見(jiàn)
var tag
comment 標記符使你能夠用注釋為DTML做注解。你還可以用它把DTML注釋掉,讓DTML標記符暫時(shí)失效。
句法
comment 標記符句法:
<dtml-comment>
</dtml-comment>
comment 標記符是一種塊標記符。塊的內容不被執行,并且不被插入到DTML輸出中。
例子
注解DTML:
<dtml-comment>
This content is not executed and does not appear in the
output.
</dtml-comment>
注釋掉DTML:
<dtml-comment>
This DTML is disabled and will not be executed.
<dtml-call someMethod>
</dtml-comment>
DTML效用函數提供一些Python內建函數和一些DTML特效函數。
函數
l abs(number)——返回數字number的絕對值。參數可以為一個(gè)普通整數或長(cháng)整數或一個(gè)浮點(diǎn)數。如果參數是一個(gè)復數,則返回它的量值。
l chr(integer)——返回一個(gè)字符,這個(gè)字符的ASCII 代碼是參數integer。例如,chr(97)返回字符a。相反的函數為ord()。參數必需在0 至 255范圍內,如果integer 超出了那個(gè)范圍就引發(fā)一個(gè)ValueError 錯誤。
l DateTime()——返回一個(gè)已知構造參數的Zope DateTime對象。有關(guān)構造參數的更多信息請參見(jiàn)附錄B“API參考”中的“DateTime類(lèi)”部分。
l divmod(number, number)——采用兩個(gè)數字作為參數并在使用長(cháng)除法時(shí)返回一對由它們的商和余數組成的數字。對于混合操作數類(lèi)型,應用二進(jìn)制算法操作符規則。對于普通和長(cháng)整數,結果等同于(a / b, a % b)。對于浮點(diǎn)數,結果是 (q, a % b),其中q是math.floor(a / b);然而,它可能會(huì )是1,小于那個(gè)數。在任何情況中,q * b + a % b 非常接近a。如果a % b是非0,它有和b相同的符號并且0 <= abs(a % b) < abs(b)。
l float(number)——把一個(gè)字符串或一個(gè)數字轉換成浮點(diǎn)數。如果參數是一個(gè)字符串,它必需包含一個(gè)可能帶有符號的小數或者用空格嵌入的浮點(diǎn)數;它的作用等同于string.atof(number)。另外,參數可以是一個(gè)普通整數或長(cháng)整數或者一個(gè)浮點(diǎn)數,如果是浮點(diǎn)數,返回相同的值(在Python的浮點(diǎn)精度以?xún)龋?/span>
l getattr(object, string)——返回對象的被指定的屬性的值。名稱(chēng)必需為一個(gè)字符串。如果string 是對象中的某個(gè)屬性的名稱(chēng),結果就是那個(gè)屬性的值。例如,getattr(x, "foobar”) 等同于x.foobar。如果被指定的屬性不存在,提供了默認值就返回默認值,否則就引發(fā)一個(gè)AttributeError 錯誤。
l getitem(variable, render=0)——返回一個(gè)DTML變量的值。如果render 為真,變量就被呈遞。見(jiàn)render 函數。
l hasattr(object, string)——參數是一個(gè)對象和一個(gè)字符串。如果這個(gè)字符串是對象的某個(gè)屬性的名稱(chēng),結果為1,否則結果為0。(這是通過(guò)調用getattr(object, name) 和查看它是否引發(fā)一個(gè)例外來(lái)實(shí)現的。)
l hash(object)——返回對象的散列值(如果它有的話(huà))。散列值是整數。它們用于在一個(gè)字典查找期間內快速比較字典鍵。相等的數字值有相同的散列值(即使它們屬于不同的類(lèi)型,例如1和1.0)。
l has_key(variable)——如果DTML名稱(chēng)空間包含variable則返回真。
l hex(integer)——把一個(gè)整數(任意大?。┺D換成十六進(jìn)制的字符。結果是一個(gè)有效的Python表達式。注意:這常常產(chǎn)生一個(gè)無(wú)符號的文字。例如在32-bit 機器上,hex(-1) 結果為0xffffffff。當在一個(gè)機器上使用相同的單詞大小求值時(shí),這個(gè)文字認為是-1;對于不同的單詞大小,它可能會(huì )變成大的正數或引發(fā)一個(gè)OverflowError 例外。
l int(number)——把一個(gè)字符串或數字轉換成一個(gè)普通整數。如果參數是一個(gè)字符串,它必須包含一個(gè)可能帶有符號的十進(jìn)制數字,這個(gè)數字可以作為一個(gè)Python整數提供,并且通過(guò)空格嵌入其中。這個(gè)行為等同于 ‘string.atoi(number[, radix])’ 。radix 參數給出了轉換的基數并且可以是2到36 范圍內的任何整數。如果指定了radix并且number不是一個(gè)字符串,引發(fā)一個(gè) TypeError 錯誤。另外,參數可以是一個(gè)普通整數或長(cháng)整數或浮點(diǎn)數。浮點(diǎn)數轉換成整數按照 C 語(yǔ)言的方法來(lái)定義;通常,轉換是把小數點(diǎn)后面數字趨向為零。
l len(sequence)——返回對象的長(cháng)度(數據項的數量)。參數可以為一個(gè)序列或一個(gè)映射(字典)。
l max(s)——s 參數(例如,一個(gè)字符串,元組或列表)唯一時(shí)返回非空序列中的最大項。當有多個(gè)參數,它返回參數中的最大一個(gè)。
l min(s)——s 參數(例如,一個(gè)字符串,元組或列表)唯一時(shí)返回非空序列中的最小項。當有多個(gè)參數時(shí),它返回參數中的最大一個(gè)。
l namespace([name=value]...)——返回一個(gè)新的DTML名稱(chēng)空間對象。關(guān)鍵字參數name=value 對被加入到新的名稱(chēng)空間中。
l oct(integer)——把一個(gè)整數(任意大?。┺D換成八進(jìn)制字符。結果是一個(gè)有效的Python表達式。注意:這總是生成一個(gè)無(wú)正負符號的文字。例如,在一個(gè)32-bit 機器上, oct(-1) 生成037777777777。當在一個(gè)具有相同單詞大小的機器上求值時(shí),這個(gè)文字結果為-1;對于一個(gè)不同的單詞大小,它可能生成一個(gè)大整數或引發(fā)一個(gè)OverflowError 例外。
l ord(character)——返回某個(gè)字符的ASCII 值。例如,ord("a") 返回整數97 。相反的函數為chr() 。
l pow(x, y [,z])——返回x的y次方。如果提供了z,它首先求x的y方,再對z求余,返回結果(執行效率高于 ‘pow(x, y) % z’)。參數必須為數字類(lèi)型。對于混合操作數類(lèi)型,應用二進(jìn)制算法操作符規則。有效的操作數類(lèi)型也是結果的類(lèi)型,如果結果不表現為這種類(lèi)型,函數引發(fā)一個(gè)例外,例如pow(2, -1) 或 pow(2, 35000)是不允許的。
l range([start,] stop [,step])——這是一個(gè)用于創(chuàng )建含有算術(shù)級數的列表的通用函數。參數必需為普通整數。如果step 參數被忽略,默認為1。如果start 參數被忽略,默認為0。返回的完整形式是一個(gè)普通整數列表 ‘[sstart, start + step, start + 2 * step, ...]’。如果step 是正數,最后一個(gè)元素是小于stop的最大‘start + i step’ ;如果step 是一個(gè)負數,最后一個(gè)元素是大于stop的最大‘start + i step’ 。step 不得為0(否則引發(fā)一個(gè)ValueError 錯誤)。
l round(x [,n])——返回x被四舍五入后的浮點(diǎn)值,它截至小數點(diǎn)后n位。如果n被忽略,它默認為零。結果是一個(gè)浮點(diǎn)數。值被四舍五入到最接近的10的負n次冪處的倍數;如果兩個(gè)倍數一樣近,四舍五入選擇遠離0的那個(gè)(例如,round (0.5)為1.0 ,round (-0.5) 為-1.0) 。
l render(object)——呈遞對象。對于DTML 對象,它使用當前的名稱(chēng)空間對DTML求值。對于其他對象,它等同于str(object) 。
l reorder(s [,with] [,without])——對s中的數據項根據在with中給定的順序重新排序,不包括在without中提到的數據項。s中沒(méi)有在with中提到的數據項被刪除。s、with和without都是字符序列或鍵值元組序列,對鍵進(jìn)行排序。這個(gè)函數對于構建有序的選擇列表是有用的。
l SecurityCalledByExecutable()——如果當前的對象(例如DTML文檔或方法)由一個(gè)可執行對象(例如其它的DTML文檔或方法,腳本或SQL方法)調用則返回真。
l SecurityCheckPermission(permission, object)——檢查安全關(guān)聯(lián)是否允許給定對象上的給定許可。例如‘ecurityCheckPermission(‘Add Documents, Images, and Files”, this())’,如果當前的用戶(hù)被授權能夠在當前位置中創(chuàng )建文檔、圖像和文件,這個(gè)函數將返回真。
l SecurityGetUser()——返回當前用戶(hù)對象。通常,它等同于REQUEST.AUTHENTICATED_USER 對象。然而,AUTHENTICATED_USER對象是不安全的,這是因為它可以被替換。
l SecurityValidate([object] [,parent] [,name] [,value])——如果當前用戶(hù)可以訪(fǎng)問(wèn)value則返回真。object 是被訪(fǎng)問(wèn)的變量所在的對象,parent 是變量的容器,name 是用于訪(fǎng)問(wèn)變量的名稱(chēng)(例如,如果它通過(guò)‘getattr’獲得)。你可以忽略其中的一些參數。但是,最好提供所有的參數。
l SecurityValidateValue(object)——如果對于當前用戶(hù)是可訪(fǎng)問(wèn)的則返回真。這個(gè)函數等同于調用SecurityValidate(None, None, None, object) 。
l str(object)——返回一個(gè)包含一個(gè)適當的可打印出的表示對象的字符串。對于字符串,它返回字符串本身。
l test(condition, result [,condition, result]... [,default])——對一對或多對condition, result 進(jìn)行測試并返回第一個(gè)條件為真的的結果。只返回一個(gè)結果,即使有多個(gè)條件為真。如果沒(méi)有條件為真并且給定默認值,那么就返回默認值。如果沒(méi)有條件為真并且沒(méi)有默認值,返回None 。
屬性
l None——None 對象等同于Python的內建對象None。它通常用于表示一個(gè)空或假值。
參見(jiàn)
string module
random module
math module
Python 內建函數 (http://www.python.org/doc/current/lib/built-in-funcs.html)
根據條件,if標記符使你能夠測試條件并且采取不同的行為。if標記符反映Python的 if/elif/else 條件測試語(yǔ)句。
句法
if標記符句法:
<dtml-if ConditionVariable|expr=”ConditionExpression”>
[<dtml-elif ConditionVariable|expr=”ConditionExpression”>]
...
[<dtml-else>]
</dtml-if>
if標記符是一種塊標記符。if標記符和可選擇的elif 標記符使用一個(gè)條件變量名稱(chēng)或一個(gè)條件表達式,但只能是其中的一種。如果條件名稱(chēng)或表達式的值為真,那么if塊被執行。真意味著(zhù)不是0、空字符串或一個(gè)空列表。如果條件變量沒(méi)有被找到,那么這個(gè)條件被認為是假。
如果初始的條件為假,則按次序測試elif 條件。如果elif 條件為真,那么塊中的內容就被執行。最終如果if和elif 條件沒(méi)有為真的,就執行可選的else塊。則只有一個(gè)塊被執行。
例子
測試一個(gè)變量:
<dtml-if snake>
The snake variable is true
</dtml-if>
測試表達式條件:
<dtml-if expr=”num > 5”>
num is greater than five
<dtml-elif expr=”num < 5”>
num is less than five
<dtml-else>
num must be five
</dtml-if>
參見(jiàn)
Python指南: if 語(yǔ)句
(http://www.python.org/doc/current/tut/node6.html#SECTION006100000000000000000)
in標記符可以讓你有力的控制循環(huán)序列和執行批處理。
句法
in標記符句法:
<dtml-in SequenceVariable|expr="SequenceExpression”>
[<dtml-else>]
</dtml-in>
in塊針對序列變量或序列表達式中的每一項重復一次。當前項在每次執行in塊時(shí)被推入到DTML名稱(chēng)空間中。
如果在序列中沒(méi)有數據項是變量或表達式,則執行可選的else塊。
屬性
l mapping——疊代映射對象而不是實(shí)例。這使得映射對象的值可以作為DTML變量被訪(fǎng)問(wèn)。
l reverse——翻轉序列。
l sort=string——按照給定的屬性名稱(chēng)對序列排序。
l start=int——要被顯示的第一項的數字,其中數據項計數從1開(kāi)始。
l end=int——要被顯示的最后一項的數字,其中數據項計數從1開(kāi)始。
l size=int——批處理的大小。
l skip_unauthorized——如果遇到一個(gè)沒(méi)有授權的數據項不引發(fā)一個(gè)例外。
l orphan=int——預期最小批處理大小。
l overlap=int——批處理塊之間相互重疊的數據項的數字。默認為3。
l previous——如果有前一個(gè)批處理塊則疊代一次。為前一個(gè)序列設置批處理變量。
l next——如果有下一個(gè)批處理塊則疊代一次。為下一個(gè)序列設置批處理變量。
標記符變量
當前數據項變量。
這些變量描述當前的數據項:
l sequence-item——當前的數據項。
l sequence-key——當前鍵字。當循環(huán)表單元組(key,value)時(shí),in標記符把它們轉換成 (sequence-key, sequence-item) 。
l sequence-index——當前數據項從0開(kāi)始的索引。
l sequence-number——當前數據項從1開(kāi)始的索引。
l sequence-roman——當前數據項以小寫(xiě)羅馬數字表示的索引。
l sequence-Roman——當前數據項以大寫(xiě)羅馬數字表示的索引。
l sequence-letter——當前數據項以小寫(xiě)字母表示的索引。
l sequence-Letter——當前數據項以大寫(xiě)字母表示的索引。
l sequence-start——如果當前數據項為第一個(gè)數據項則為真。
l sequence-end——如果當前數據項為最后一個(gè)數據項則為真。
l sequence-even——如果當前數據項索引為偶數則為真。
l sequence-odd——如果當前數據項索引為奇數則為真。
l sequence-length——序列的長(cháng)度。
l sequence-var-variable——在當前數據項中的一個(gè)變量。例如,sequence-var-title是當前數據項的標題變量。通常,你可以直接訪(fǎng)問(wèn)這個(gè)變量,這是因為當前的數據項被推到DTML名稱(chēng)空間中。而且,當顯示前一個(gè)和下一個(gè)批處理信息時(shí)這些變量就可以被用上。
l sequence-index-variable——當前數據項的變量索引。
總結變量
這些變量總結了有關(guān)數據項變量數字方面的信息。要使用這些變量,你必須循環(huán)含有數字變量的對象(比如數據庫查詢(xún)結果)。
l total-variable——一個(gè)數據項變量的所有實(shí)例的總數。
l count-variable——一個(gè)數據項變量的實(shí)例數。
l min-variable——一個(gè)數據項變量的最小值。
l max-variable——一個(gè)數據項變量的最大值。
l mean-variable——一個(gè)數據項變量的平均值。
l variance-variable——一個(gè)數據項的count-1 自由度方差。
l variance-n-variable——一個(gè)數據項變量的n自由度方差。
l standard-deviation-variable——一個(gè)數據項變量的count-1 自由度標準偏差
l standard-deviation-n-variable——一個(gè)數據項變量的n自由度標準偏差。
分組變量
這些變量使你能夠跟蹤當前數據項變量的變化:
l first-variable——如果當前數據項是第一個(gè)具有特定變量值的數據項則為真。
l last-variable——如果當前數據項是最后一個(gè)具有特定變量值的數據項則為真。
批處理變量
l sequence-query——不包含start變量的查詢(xún)字符。你可以使用這個(gè)變量來(lái)構建與下一個(gè)和前一個(gè)批處理塊的鏈接。
l sequence-step-size——批處理塊的大小。
l previous-sequence——如果當前批處理塊不是第一個(gè)則為真。注意,這個(gè)變量只對第一次循環(huán)迭代為真。
l previous-sequence-start-index——前一個(gè)批處理塊的開(kāi)始索引。
l previous-sequence-start-number——前一個(gè)批處理塊的開(kāi)始數字。注意,它等同于previous-sequence-start-index + 1。
l previous-sequence-end-index——前一個(gè)批處理塊的結束索引。
l previous-sequence-end-number——前一個(gè)批處理塊的結束數字。注意,它等同于previous-sequence-end-index + 1。
l previous-sequence-size——前一個(gè)批處理塊的大小。
l previous-batches——帶有前一個(gè)批處理塊所有相關(guān)信息的映射對象序列。每個(gè)映射對象有三個(gè)鍵:batch-start-index、 batch-end-index 和 batch-size 。
l next-sequence——如果當前批處理塊不是最后一個(gè)批處理塊則為真。注意,這個(gè)變量只對最后的循環(huán)迭代才為真。
l next-sequence-start-index——下一個(gè)序列的開(kāi)始索引。
l next-sequence-start-number——下一個(gè)序列的開(kāi)始數字。注意,這等同于next-sequence-start-index + 1。
l next-sequence-end-index——下一個(gè)序列的結束索引。
l next-sequence-end-number——下一個(gè)序列的結束數字。注意,這等同于 next-sequence-end-index + 1。
l next-sequence-size——下一個(gè)索引的大小。
l next-batches——帶有下一個(gè)批處理塊所有相關(guān)信息的映射對象序列。每個(gè)映射對象有三個(gè)鍵:batch-start-index, batch-end-index, and batch-size。
例子
循環(huán)下級對象:
<dtml-in objectValues>
title: <dtml-var title><br>
</dtml-in>
循環(huán)元組列表(key,value):
<dtml-in objectItems>
id: <dtml-var sequence-key>, title: <dtml-var title><br>
</dtml-in>
創(chuàng )建具有交替顏色的表格單元:
<table>
<dtml-in objectValues>
<tr <dtml-if sequence-odd>bgcolor=“#EEEEEE”
<dtml-else>bgcolor=“#FFFFFF”
</dtml-if>
<td><dtml-var title></td>
</tr>
</dtml-in>
</table>
基本批處理:
<p>
<dtml-in largeSequence size=10 start=start previous>
<a href=“<dtml-var absolute_url><dtml-var sequence-query>
start=<dtml-var previous-sequence-start-number>“>Previous</a>
</dtml-in>
<dtml-in largeSequence size=10 start=start next>
<a href=“<dtml-var absolute_url><dtml-var sequence-query>
start=<dtml-var next-sequence-start-number>“>Next</a>
</dtml-in>
</p>
<p>
<dtml-in largeSequence size=10 start=start>
<dtml-var sequence-item>
</dtml-in>
</p>
這個(gè)例子創(chuàng )建前一個(gè)和下一個(gè)鏈接,從而在批處理塊之間跳轉。注意,通過(guò)使用sequence-query,當你在批處理塊之間跳轉時(shí),你不會(huì )丟失任何任何GET變量。
let標記符定義DTML名稱(chēng)空間里的變量。
句法
let標記符句法:
<dtml-let [Name=Variable][Name=”Expression”]...>
</dtml-let>
let標記符是一種塊標記符。變量通過(guò)標記符參數被定義。在let塊被執行的同時(shí),定義的變量被推進(jìn)到DTML名稱(chēng)空間。變量通過(guò)屬性定義。let標記符可以有一個(gè)或多個(gè)任意命名的屬性。如果屬性用雙引號定義,它們被認為是表達式。否則,它們按照名稱(chēng)查找相應變量。屬性按順序處理,因此后邊的屬性可以引用和覆蓋前邊的屬性。
例子
基本用法:
<dtml-let name=”‘Bob‘” ids=objectIds>
name: <dtml-var name>
ids: <dtml-var ids>
</dtml-let>
和in標記符一起使用let標記符:
<dtml-in expr=“(1,2,3,4)”>
<dtml-let num=sequence-item
index=sequence-index
result=”num*index”>
<dtml-var num> * <dtml-var index> = <dtml-var result>
</dtml-let>
</dtml-in>
這會(huì )生成:
1 * 0 = 0
2 * 1 = 2
3 * 2 = 6
4 * 3 = 12
參見(jiàn)
with 標記符
數學(xué)函數模塊提供三角和其它數學(xué)函數。它是標準的Python模塊。
函數
l acos(x)——返回x的arc cosine 值。
l asin(x)——返回x的arc sine 值。
l atan(x)——返回x的arc tangent 值。
l atan2(x, y)——返回atan(y / x) 值。
l ceil(x)——以實(shí)數形式返回x的上限。
l cos(x)——返回x的cosine值。
l cosh(x)——返回x的雙曲線(xiàn) cosine 值。
l exp(x)——返回e**x 。
l fabs(x)——返回實(shí)數x的絕對值。
l floor(x)——以實(shí)數形式返回x的基數。
l fmod(x, y)——返回fmod(x, y) ,它由平臺的C庫定義。注意,Python表達式x % y 不返回相同的結果。
l fexp(x)——以 (m, e)對的形式返回x的尾數和指數。m是一個(gè)浮點(diǎn)數,e是一個(gè)整數,比如‘x == m * 2*e’ 。如果x為零,它返回 (0.0, 0),其他情況下返回0.5 <= abs(m) < 1 。
l hypot(x, y)——返回 歐幾里得幾何學(xué)的距離,sqrt(x*x + y*y) 。
l ldexp(x, y)——返回x * (2**i) 。
l log(x)——返回x的自然對數值。
l log10(x)——返回以10為底的x的對數。
l modf(x)——返回x的分數和整數部分。兩個(gè)結果都執行x的sine 運算。整數部分以實(shí)數形式返回。
l pow(x, y)——返回x的y次冪。
l sin(x)——返回x的sine 值。
l sinh(x)——返回x的雙曲線(xiàn)sine 值。
l sqrt(x)——返回x的平方根。
l tan(x)——返回x的tangent 值。
l tanh(x)——返回x的雙曲線(xiàn)tangent值 。
屬性
l e——數學(xué)常量e
l pi——數學(xué)常量pi
參見(jiàn)
Python 數學(xué)模塊 (http://www.python.org/doc/current/lib/module-math.html)
mime 標記符使你能夠創(chuàng )建MIME 編碼數據。它主要用于在sendmail 標記符內格式電子郵件。
句法
mime 標記符句法:
<dtml-mime>
[<dtml-boundry>]
...
</dtml-mime>
mime 標記符是一種塊標記符。塊可以用一個(gè)或多個(gè)boundry 標記符分隔來(lái)創(chuàng )建多部分MIME 消息。mime 標記符可以簽套。mime 標記符主要用在sendmail 標記符里。
屬性
所有的mime 和boundry 標記符都有相同的屬性:
l encode=string——MIME 內容傳輸編碼報頭,默認為base64。有效的編碼選項包括base64、 quoted-printable、 uuencode、 x-uuencode、 uue、 x-uue 和 7bit。在塊上不編碼,數據被假定為一種有效的MIME 格式。
l type=string——MIME 內容-類(lèi)型報頭。
l type_expr=string——作為變量表達式的MIME 內容-類(lèi)型報頭。你不能同時(shí)使用type 和 type_expr 。
l name=string——MIME 內容-類(lèi)型報頭名稱(chēng)。
l name_expr=string——作為變量表達式的MIME 內容-類(lèi)型報頭名稱(chēng)。你不能同時(shí)使用name 和 name_expr。
l disposition=string——MIME 內容-部署報頭。
l disposition_expr=string——作為變量表達式的MIME 內容-部署報頭。你不能同時(shí)使用disposition 和 disposition_expr。
l filename=string——MIME 內容-部署報頭文件名。
l filename_expr=string——作為變量表達式的MIME 內容-部署報頭文件名。你不能同時(shí)使用filename 和 filename_expr 。
l skip_expr=string——一個(gè)變量表達式,如果為真就跳過(guò)塊。你可以使用這個(gè)屬性來(lái)有選擇性的包含MIME 塊。
例子
發(fā)送一個(gè)文件附件:
<dtml-sendmail>
To: <dtml-recipient>
Subject: Resume
<dtml-mime type=”text/plain” encode=“7bit”>
Hi, please take a look at my resume.
<dtml-boundary type=”application/octet-stream” disposition=”attachment”
encode=”base64” filename_expr=”resume_file.getId()”>
<dtml-var expr=”resume_file.read()”></dtml-mime>
</dtml-sendmail>
參見(jiàn)
Python Library: mimetools (http://www.python.org/doc/current/lib/module-mimetools.html)
raise標記符引發(fā)一個(gè)例外,反映Python的raise語(yǔ)句。
句法
raise標記符語(yǔ)句:
<dtml-raise ExceptionName|ExceptionExpression>
</dtml-raise>
raise標記符是一種塊標記符。它引發(fā)一個(gè)例外。例外可以是一個(gè)exception 類(lèi)或一個(gè)字符串。標記符的內容作為錯誤的值。
例子
引發(fā)一個(gè)KeyError:
<dtml-raise KeyError></dtml-raise>
引發(fā)HTTP 404 錯誤:
<dtml-raise NotFound>Web Page Not Found</dtml-raise>
參見(jiàn)
try 標記符
Python 指南: Errors and Exceptions
(http://www.python.org/doc/current/tut/node10.html)
Python 內建例外 (http://www.python.org/doc/current/lib/module-exceptions.html)
random 模塊提供了偽隨機數函數。用它,你可以生成隨機數字以及從序列中選擇隨機元素。這個(gè)模塊是一個(gè)標準Python模塊。
函數
l choice(seq)——從非空序列seg中選擇一個(gè)隨機元素,并返回它。
l randint(a, b)——返回一個(gè)隨機整數N,并且a<=N<=b 。
l random()——返回下一個(gè)[0.0…1.0]范圍內的隨機浮點(diǎn)數。
l seed(x, y, z)——從整數x,y和z初始隨機數字生成器。當這個(gè)模塊首次被導入,隨機數字使用從當前時(shí)間獲得的值初始化。
l uniform(a, b)——返回一個(gè)隨機實(shí)數N,并且 a<=N<b 。
參見(jiàn)
Python 隨機模塊 (http://www.python.org/doc/current/lib/module-whrandom.html)
return 標記符停止執行DTML并返回數據。它反映Python的return 語(yǔ)句。
句法
return 標記符句法:
<dtml-return ReturnVariable|expr=”ReturnExpression”>
它停止執行DTML并返回一個(gè)變量或表達式。DTML輸出不被返回。通常,一個(gè)返回表達式比起返回一個(gè)變量更為有用。腳本使得這個(gè)標記符在很大程度上荒廢了。
例子
返回一個(gè)變量:
<dtml-return result>
返回一個(gè)Python字典:
<dtml-return expr=”{‘hi’:200, ’lo’:5}”>
sendmail 標記符使用SMTP發(fā)送一個(gè)電子郵件信息。
句法
sendmail 標記符句法:
<dtml-sendmail>
</dtml-sendmail>
sendmail 標記符是一種塊標記符。它需要一個(gè)郵件主機或一個(gè)smtphost 參數,但是不是兩者都需要。標記符塊作為一條郵件消息被發(fā)送。塊的開(kāi)始描述電子郵件報頭。報頭和正文之間用一個(gè)空行分開(kāi)。To、 From 和 Subject報頭可以通過(guò)標記符參數設置。
屬性
l mailhost——用于發(fā)送電子郵件的Zope郵件主機對象的名稱(chēng)。你不能同時(shí)指定mailhost 和 smtphost 。
l smtphost——用于發(fā)送電子郵件的SMTP服務(wù)器的名稱(chēng)。你不同同時(shí)指定mailhost 和 smtphost 。
l port——如果使用smtphost 屬性,那么port 屬性用于指定連接的端口號。如果沒(méi)有指定,那么就使用端口 25 。
l mailto——接收地址或一個(gè)用逗號分開(kāi)的接收地址列表。這也可以用 To 報頭指定。
l mailfrom——發(fā)送者地址。還可以用From 報頭指定。
l subject——電子郵件主題。還可以用Subject 報頭指定。
例子
使用一個(gè)mailhost發(fā)送一個(gè)電子郵件:
<dtml-sendmail mailhost=”mailhost”>
To: <dtml-var recipient>
From: <dtml-var sender>
Subject: <dtml-var subject>
Dear <dtml-var recipient>,
You order number <dtml-var order_number> is ready.
Please pick it up at your soonest convenience.
</dtml-sendmail>
參見(jiàn)
RFC 821 (SMTP Protocol) (http://www.ietf.org/rfc/rfc0821.txt)
mime 標記符
sqlgroup 標記符格式復雜的布爾SQL表達式。你可以用它配合sqltest 標記符來(lái)構建動(dòng)態(tài)SQL查詢(xún),使之滿(mǎn)足需要。這個(gè)標記符被用在SQL方法中。
句法
sqlgroup 標記符句法:
<dtml-sqlgroup>
[<dtml-or>]
[<dtml-and>]
...
</dtml-sqlgroup>
sqlgroup 標記符是一種塊標記符。它用一個(gè)或多個(gè)可選的or和and標記符劃分成塊。sqlgroup 標記符可以簽套,從而產(chǎn)生復雜的邏輯。
屬性
l required=boolean——指出這組SQL語(yǔ)句是否為必需的。如果它不是必需的并且為空,它就不在DTML輸出中顯示。
l where=boolean——如果為真,則包含字符串 “Where” 。這用于一個(gè)SQL select 查詢(xún)中的最外面的sqlgroup 標記符。
例子
例子用法:
select * from employees
<dtml-sqlgroup where>
<dtml-sqltest salary op=gt type=float optional>
<dtml-and>
<dtml-sqltest first op=eq type=string multiple optional>
<dtml-and>
<dtml-sqltest last op=eq type=string multiple optional>
</dtml-sqlgroup>
如果first 為Bob ,last 為Smith,McDonald,它處理結果為:
select * from employees
where
(first=‘bob’
and
last in (‘Smith’, ‘McDonald’)
)
如果salary 為50000 ,last 為Smith,它處理結果為:
select * from employees
where
(salary > 50000.0
and
last=‘Smith’
)
簽套的sqlgroup 標記符:
select * from employees
<dtml-sqlgroup where>
<dtml-sqlgroup>
<dtml-sqltest first op=like type=string>
<dtml-and>
<dtml-sqltest last op=like type=string>
<dtml-sqlgroup>
<dtml-or>
<dtml-sqltest salary op=gt type=float>
</dtml-sqlgroup>
給定例子參數,這個(gè)模板處理的結果是這樣的SQL:
select * form employees
where
(
(
name like ‘A*’
and
last like ‘Smith’
)
or
salary > 20000.0
)
參見(jiàn)
sqltest 標記符
sqltest 標記符把一個(gè)條件測試插入到SQL代碼中。它對一個(gè)列和一個(gè)變量進(jìn)行測試。這個(gè)標記符用在SQL方法里。
句法
sqltest 標記符句法:
<dtml-sqltest Variable|expr=”VariableExpression”>
sqltest 標記符是一種獨立標記符。它插入一段SQL條件測試語(yǔ)句。它用于構建SQL查詢(xún)。sqltest 標記符恰當的避開(kāi)了被插入的變量。被指定的變量或變量表達式和SQL列之間使用指定的比較操作符進(jìn)行比較。
屬性
l type=string——變量的類(lèi)型。有效的類(lèi)型包括string、 int、 float 和 nb。nb含義是非空字符串。類(lèi)型屬性是必需的并且被用于把一個(gè)被插入的變量轉換成恰當的類(lèi)型。
l column=string——用來(lái)進(jìn)行測試的SQL列的名稱(chēng)。這個(gè)屬性默認為變量名稱(chēng)。
l multiple=boolean——如果為真,那么變量可以是一個(gè)用來(lái)測試列的值序列。
l optional=boolean——如果為真,那么測試是可選擇項,并且如果變量為空或不存在,它將不被處理。
l op=string——比較操作。有效的比較包括以下:
n eq—— 等于
n gt—— 大于
n lt—— 小于
n ne—— 不等于
n ge—— 大于或等于
n le—— 小于或等于
默認的比較是等于。如果比較不被識別,就用它。這樣,你總是可以這樣使用比較。
例子
基本用法:
select * from employees
where <dtml-sqltest name type=”string”>
如果name 變量是Bob,那么這會(huì )呈遞為:
select * from employees
where name = ‘bob’
多個(gè)值:
select * from employees
where <dtml-sqltest empid type=int multiple>
如果empid 變量是(12,14,17),那么這會(huì )呈遞為:
select * from employees
where empid in (12, 14, 17)
參見(jiàn)
sqlgroup 標記符
sqlvar 標記符
sqlvar 標記符把變量插入到SQL代碼中。這個(gè)標記符用在SQL方法中。
句法
sqlvar 標記符句法:
<dtml-sqlvar Variable|expr=”VariableExpression”>
sqlvar 標記符是一種獨立標記符。就像var 標記符,sqlvar 標記符查找變量并插入它。不像var 標記符,格式選項是為了用于調整SQL代碼。
屬性
l type=string——變量的類(lèi)型。有效的類(lèi)型包括string、 int,、 float 和 nb。nb含義為非空字符串。類(lèi)型屬性是必需的并且被用來(lái)把一個(gè)被插入的變量轉換成恰當的類(lèi)型。
l optional=boolean——如果為真,并且變量為空或者不存在,那么不插入任何內容。
例子
基本用法:
select * from employees
where name=<dtml-sqlvar name type=”string”>
這段SQL引用name 字符串變量
參見(jiàn)
sqltest 標記符
字符串模塊提供了字符處理、轉換和搜索函數。它是一個(gè)標準的Python模塊。
函數
l atof(s)——把一個(gè)字符串轉換成一個(gè)浮點(diǎn)數。字符串必需在字面上有Python中的浮點(diǎn)標準句法,可選擇在前面添加有符號(“+” 或 “-”)。注意,這個(gè)行為在傳遞一個(gè)字符串時(shí)等同于內建的函數float()。
l atoi(s [,base])——把字符串轉換成一個(gè)給定基數中的整數。字符串必需由一個(gè)或多個(gè)數字組成,可選擇在前面添加有符號(“+” 或 “-”)?;鶖的J為10。如果它為0,一個(gè)默認基數被選擇,取決于字符串的頭幾個(gè)字符(刪去符號以后): “0x” 或者 “0X”意味著(zhù)16, “0” 意味著(zhù) 8,其它的意味著(zhù)10。如果基數是16,首字為 “0x” 或 “0X”總是可以接受的,盡管不是必須的。
l atol(s, [,base])——把字符串轉換成一個(gè)給定基數中的長(cháng)整數。字符串必需由一個(gè)或多個(gè)數字組成,可選擇在前面添加有符號(“+” 或 “-”)?;鶖祬档暮x和atoi()中的一樣。結尾是"l” 或 "L”是不允許的,除了基數是0以外。
l capitalize(word)——大寫(xiě)參數的第一個(gè)字符。
l capwords(s)——使用split()把參數分割成單詞,大寫(xiě)每個(gè)單詞使用capitalize(),連接大寫(xiě)化的單詞使用join()。注意,它把多個(gè)連續空格用一個(gè)空格替換并且刪除頭部和尾部的空格。
l find(s, sub [,start [,end]])——返回在s里找到字符串子集sub處的最低索引,這樣一來(lái),sub完全包含在s[start:end]中。失敗時(shí)它返回一個(gè)-1 。start、end 和負數值的解釋和分片(slices)中的一樣。
l rfind(s, sub [,start [,end]])——類(lèi)似于find(),不同點(diǎn)在于它查找最高索引。
l index(s, sub [,start [,end]])——類(lèi)似于find(),不同點(diǎn)在于當字符串子集沒(méi)有被找到時(shí),引發(fā)一個(gè)ValueError。
l rindex(s, sub [,start [,end]])——類(lèi)似于rfind(),不同點(diǎn)在于當字符串子集沒(méi)有被找到時(shí),引發(fā)一個(gè)ValueError。
l count(s, sub [,start [,end]])——返回字符串子集sub在字符串s[start:end]中出現的次數(不重疊)。默認的start、 end 和 負數值的解釋和分片(slices)中的一樣。
l lower(s)——返回一個(gè)s的副本,但是把大寫(xiě)字母轉換成小寫(xiě)字母。
l makestrans(from, to)——返回適合傳遞給translate()的轉換表,其把每個(gè)from中的字符映射成在to中相同位置的字符。from和to必須長(cháng)度相同。
l split(s, [,sep [,maxsplit]])——返回字符串s 中的單詞列表。如果可選擇的第二個(gè)參數sep 缺少或為None,這些單詞就用空格字符分隔(比如空格,tab,換行符,回車(chē),進(jìn)紙)。如果提供了第二個(gè)參數sep并且不為 None。它指定一個(gè)用分割單詞的字符。比起字符串中的非重疊分隔符出現的次數,返回的列表將多一個(gè)項??蛇x擇的第三個(gè)參數maxsplit 默認為0。如果它為非零,至多發(fā)生maxsplit 次的分割,并且余下的字符串作為最終的列表元素被返回(這樣列表將有至多maxsplit+1個(gè)元素)。
l join(words [,sep])——用插入分隔符sep的方法把單詞列表或元組連接起來(lái)。sep 的默認值為一個(gè)空格符。string.join(string.split(s, sep), sep)等于s總為真。
l lstrip(string)——返回一個(gè)最前邊沒(méi)有空格符的字符串s的副本。
l rstrip(string)——返回一個(gè)結尾沒(méi)有空格符的字符串s的副本。
l strip(string)——返回一個(gè)最前邊或結尾沒(méi)有空格符的字符串s的副本。
l swapcase(s)——返回一個(gè)把小寫(xiě)字母轉換成大寫(xiě)字母的字符串s的副本,反之亦然。
l translate(s, table [,deletechars])——從s中刪除所有的deletechars (如果提供的話(huà))里的字符,然后使用table轉換這些字符,其中必須是為每個(gè)字符值和次序索引賦予轉換的256字符集字符串。
l upper(s)——返回一個(gè)把小寫(xiě)字母轉換成大寫(xiě)字母的字符串副本。
l ljust(string, width)——在一個(gè)給定寬度的區域中左對齊一個(gè)字符串。返回一個(gè)至少達到字符寬度要求的字符串,方式是通過(guò)把空格填充到字符串中,直到給定的寬度為止。字符串從不被刪節。
l rjust(string, width)——在一個(gè)給定寬度的區域中右對齊一個(gè)字符串。返回一個(gè)至少達到字符寬度要求的字符串,方式是通過(guò)把空格填充到字符串中,直到給定的寬度為止。字符串從不被刪節。
l center(string, width)——在一個(gè)給定寬度的區域中居中一個(gè)字符串。返回一個(gè)至少達到字符寬度要求的字符串,方式是通過(guò)把空格填充到字符串中,直到給定的寬度為止。字符串從不被刪節。
l zfill(s, width)——用0數字填充數字字符串的左側,直到達到指定的寬度。前邊帶有符號的字符串可以被正確處理。
l replace(s, old, new [,maxsplit])——把字符串s中的原有的字符串子集old 替換成新的字符串子集new,返回最終的字符串副本。如果給定可選的參數maxsplit ,那么出現的第一個(gè)maxsplit 被替換。
屬性
l digits——字符串0123456789 。
l hexdigits——字符串 0123456789abcdefABCDEF 。
l letters——所有下邊所述的小寫(xiě)字母和大寫(xiě)字母。
l lowercase——包含所有的小寫(xiě)字母的字符串。在大多數系統上,是abcdefghijklmnopqrstuvwxyz 。
l octdigits——字符串01234567 。
l uppercase——包含所有的大寫(xiě)字母的字符串ABCDEFGHIJKLMNOPQRSTUVWXYZ。
l whitespace——包含所有被認為是空格符的字符串。在大多數系統中,包括空格符、tab、換行符、回車(chē)符、進(jìn)紙和垂直tab。
參見(jiàn)
Python 字符串模塊 (http://www.python.org/doc/current/lib/module-string.html)
tree 標記符通過(guò)查詢(xún)Zope對象顯示一個(gè)動(dòng)態(tài)的樹(shù)部件。
句法
tree 標記符句法:
<dtml-tree [VariableName|expr="VariableExpression"]>
</dtml-tree>
tree 標記符是一種塊標記符。它呈遞一個(gè)HTML形式的動(dòng)態(tài)樹(shù)部件。樹(shù)的根由變量或表達式給定。另外,它默認為當前的對象。通過(guò)把當前的節點(diǎn)映射成DTML名稱(chēng)空間,對每個(gè)節點(diǎn)進(jìn)行樹(shù)塊呈遞。
樹(shù)的狀態(tài)被設置在HTTP cookies中。這樣,要使用樹(shù),就必須激活cookies 。另外,每頁(yè)只顯示一個(gè)樹(shù)。
屬性
l branches=string——通過(guò)調用指定的方法查找樹(shù)的分支。默認的方法是tpValues,大多數Zope對象支持它。
l branches_expr=string——通過(guò)對表達式求值來(lái)查找樹(shù)的分支。
l id=string——用于測定樹(shù)的狀態(tài)的方法或id的名稱(chēng)。它默認為tpId,大多數Zope對象都支持它。這個(gè)屬性只適合高級用法。
l url=string——用于測定樹(shù)的數據項URL的方法或屬性的名稱(chēng)。它默認為tpURL,大多數Zope對象都支持它。這個(gè)屬性適合高級用法。
l leaves=string——用來(lái)呈遞沒(méi)有子項的節點(diǎn)的DTML文檔或方法的名稱(chēng)。注意:這個(gè)文檔應該以<dtml-var standard_html_header>,以<dtml-var standard_html_footer>結束,從而確保正確的在樹(shù)中顯示
l header=string——節點(diǎn)展開(kāi)以前被顯示的DTML文檔或方法的名稱(chēng)。如果頁(yè)眉沒(méi)有被找到,它就被忽略掉。
l footer=string——節點(diǎn)展開(kāi)以后被顯示的DTML文檔或方法的名稱(chēng)。如果頁(yè)腳沒(méi)有被找到,它就被忽略掉。
l nowrap=boolean——如果為真,那么節點(diǎn)不是被隱藏起來(lái),節點(diǎn)而是按照現有大小被縮短。
l sort=string——按照指定的屬性對分支進(jìn)行排序。
l reverse——顛倒分支的次序。
l assume_children=boolean——假設節點(diǎn)有子項。如果取得和查詢(xún)子節點(diǎn)是一個(gè)費時(shí)的過(guò)程,它是有用的。在加號框內可以被下拉的的結果緊挨所有的節點(diǎn)。
l single=boolean——只允許一次展開(kāi)一個(gè)分支。當你展開(kāi)一個(gè)新的分支時(shí),任何其他的已經(jīng)展開(kāi)的分支關(guān)閉。
l skip_unauthorized——忽略用戶(hù)不允許看到的節點(diǎn),而不是引發(fā)一個(gè)錯誤。
l urlparam=string——被包含在展開(kāi)和縮進(jìn)部件連接里的查詢(xún)字符串。這個(gè)屬性只適用于高級用法。
標記符標量
l tree-item-expanded——如果當前的節點(diǎn)已經(jīng)展開(kāi)則為真。
l tree-item-url——當前節點(diǎn)的URL。
l tree-root-url——根節點(diǎn)的URL。
l tree-level——當前節點(diǎn)的深度。頂級節點(diǎn)的深度為0。
l tree-colspan——正在被呈遞的樹(shù)的最大層級。當把行插入到樹(shù)表格中時(shí),這個(gè)變量可以隨同樹(shù)級變量被用來(lái)計算表格行和列跨度設置。
l tree-state——用id列表和id列表子集表示的樹(shù)的狀態(tài)。這個(gè)變量只適用于高級用法。
標記符控制變量
通過(guò)設置以下變量,你可以控制樹(shù)標記符。
l expand_all——如果這個(gè)變量為真,那么整個(gè)樹(shù)是展開(kāi)的。
l collapse_all——如果這個(gè)變量為真,那么整個(gè)樹(shù)是合攏的。
例子
以下顯示一個(gè)在當前對象中生成的樹(shù):
<dtml-tree>
<dtml-var title_or_id>
</dtml-tree>
以下顯示一個(gè)用特定的分支方法在另外一個(gè)對象中生成的樹(shù):
<dtml-tree expr=”folder.object” branches=”objectValues”>
Node id : <dtml-var getId>
</dtml-tree>
try標記符使你能夠用DTML處理例外,反映 Python中的try/except 和 try/finally構造。
句法
try標記符有兩個(gè)不同的句法,try/except/else 和 try/finally
try/except/else 句法:
<dtml-try>
<dtml-except [ExceptionName] [ExceptionName]...>
...
[<dtml-else>]
</dtml-try>
try標記符在一個(gè)塊中捕捉和處理例外??梢杂幸粋€(gè)或多個(gè)except標記符用來(lái)處理無(wú)例外或多個(gè)例外。如果一個(gè)except標記符沒(méi)有指定一個(gè)例外,那么它處理所有的例外。
當一個(gè)例外被引發(fā),立即讓第一個(gè)標記符處理這個(gè)例外。如果沒(méi)有except標記符來(lái)處理例外,那么例外以通常的方式被引發(fā)。
如果沒(méi)有例外被引發(fā),并且有一個(gè)else標記符,那么else標記符在try標記符正文以后被執行。
except 和 else標記符是可選擇的。
try/finally句法
<dtml-try>
<dtml-finally>
</dtml-try>
finally標記符不能象except 和 else 標記符那樣在相同的try塊中使用。如果有一個(gè)finally標記符,它的塊不管例外在try塊內是否被引發(fā)都將被執行。
屬性
l except——0個(gè)或多個(gè)例外名稱(chēng)。如果沒(méi)有列出例外,那么except標記符處理所有的例外。
標記符變量
在except塊內部定義了這些變量:
l error_type——例外類(lèi)型。
l error_value——例外的值。
l error_tb——回溯
例子
捕捉一個(gè)數學(xué)錯誤:
<dtml-try>
<dtml-var expr=“1/0”>
<dtml-except ZeroDivisionError>
You tried to divide by zero.
</dtml-try>
返回關(guān)于被處理的例外的信息:
<dtml-try>
<dtml-call dangerousMethod>
<dtml-except>
An error occurred.
Error type: <dtml-var error_type>
Error value: <dtml-var error_value>
</dtml-try>
使用finally來(lái)確保正常執行,不管是否引發(fā)一個(gè)錯誤:
<dtml-call acquireLock>
<dtml-try>
<dtml-call someMethod>
<dtml-finally>
<dtml-call releaseLock>
</dtml-try>
參見(jiàn)
raise 標記符
Python 指南: 錯誤和例外 (http://www.python.org/doc/current/tut/node10.html)
Python 內建例外 (http://www.python.org/doc/current/lib/module-exceptions.html)
unless標記符提供了一個(gè)測試相反條件的快捷方式。對于更為完整的條件測試,請使用if標記符。
句法:
unless 標記符句法:
<dtml-unless ConditionVariable|expr=“ConditionExpression”>
</dtml-unless>
unless標記符是一種塊標記符。如果條件變量或表達式求值為假,那么就執行塊中所包含內容。就像if標記符,沒(méi)有提供變量被認為假。
例子:
測試一個(gè)變量:
<dtml-unless testMode>
<dtml-call dangerousOperation>
</dtml-unless>
如果testMode不存在就執行這個(gè)塊,或者只要為假就退出。
參見(jiàn)
if 標記符
var標記符使你能夠把一個(gè)變量插入到DTML輸出中。
句法
var標記符句法:
<dtml-var Variable|expr=”Expression”>
var標記符是一種獨立標記符。var標記符通過(guò)搜索DTML名稱(chēng)空間查找一個(gè)變量,DTML名稱(chēng)空間通常包括當前對象、當前對象的容器和Web請求。如果變量被找到,就把它插入到DTML輸出中。如果它沒(méi)有被找到,Zope引發(fā)一個(gè)錯誤。
var標記符實(shí)體句法:
&dtml-variableName;
實(shí)體句法是一種插入的快捷方式并且HTML引用變量。當把變量插入到HTML標記符中時(shí)會(huì )用到它。
帶有屬性的var標記符實(shí)體句法:
&dtml.attribute1[.attribute2]...-variableName;
在某種程度上,你可以用實(shí)體句法指定屬性。你可以包含0個(gè)或多個(gè)用句點(diǎn)分開(kāi)的屬性。你不能使用實(shí)體句法為屬性提供參數。如果你提供0個(gè)或多個(gè)屬性,那么變量不是自動(dòng)的被HTML引用。這樣一來(lái),你可以避免使用這種句法的HTML引用,&dtml.-variableName;。
屬性
l html_quote——把在HTML中具有特定含義的字符轉換成HTML字符實(shí)體。
l missing=string——在Zope不能找到變量的情況下,指定一個(gè)默認值。
l fmt=string——格式一個(gè)變量。Zope提供一些內建的格式,包括C風(fēng)格的格式字符串。關(guān)于C風(fēng)格的格式字符串方面的信息,請見(jiàn)Python庫參考(http://www.python.org/doc/current/lib/typesseq-strings.html)。如果格式字符串不是一個(gè)內建格式,那么它被假定為一個(gè)對象方法,然后它被調用。
l whole-dollars——按美元格式化變量。
l dollars-and-cents——按美元和美分格式化變量。
l collection-length——變量的長(cháng)度,假設它是一個(gè)序列。
l structured-text——按照結構文本格式化變量。關(guān)于結構文本方面的更多信息,請見(jiàn)Zope.org Web站點(diǎn)中的Structured Text How-To (http://www.zope.org/Members/millejoh/structuredText)。
l null=string——如果變量為None時(shí)使用的默認值。
l lower——把大寫(xiě)字母轉換成小寫(xiě)字母。
l upper——把小寫(xiě)字母轉換成大寫(xiě)字母。
l capitalize——把被插入的單詞的首個(gè)字符變成大寫(xiě)。
l spacify——把被插入的值中的下劃線(xiàn)更改成空格。
l thousands_commas——在包含數字的值中,從小數點(diǎn)左邊開(kāi)始每隔三個(gè)數字插入逗號,例如12000 變?yōu)?/span> 12,000 。
l url——通過(guò)調用對象的absolute_url方法插入對象的URL 。
l url_quote——把URL中具有特殊含義的字符轉換成HTML字符實(shí)體。
l url_quote_plus——URL引用字符,例如url_quote ,但是它還把空格轉換成加號。
l sql_quote——把單引號轉換為成對的單引號。安全的在SQL字符串中包含值時(shí)需要用到它。
l newline_to_br——把換行符(包含回車(chē))轉換成HTML換行符。
l size=arg——按照給定長(cháng)度截取變量(注意:如果在被截取的字符串的下半部有空格,那么字符串被截取到最右邊的空格。
l etc=arg——指定一個(gè)用來(lái)添加到被截取的字符串(通過(guò)設置前邊所述的size屬性)結尾處的字符串。默認為… 。
例子
在一個(gè)文檔中插入一個(gè)簡(jiǎn)單變量:
<dtml-var standard_html_header>
補加:
<dtml-var colors size=10 etc=“, etc.”>
如果colors是字符串red yellow green,生成以下輸出:
red yellow, etc.
C風(fēng)格字符格式:
<dtml-var expr=“23432.2323” fmt=“%.2f”>
呈遞為
23432.23
用實(shí)體句法在一個(gè)HTML A標記符內插入一個(gè)變量鏈接:
<a href=“&dtml-link;”>Link</a>
使用帶有屬性的實(shí)體句法給一個(gè)文檔 doc 加入一個(gè)鏈接:
<a href=“&dtml.url-doc;”><dtml-var doc fmt=”title_or_id”></a>
這樣就給一個(gè)對象創(chuàng )建一個(gè)使用它的URL和標題的HTML鏈接。這個(gè)例子針對URL(使用url屬性)調用對象的absolute_url 方法,針對標題調用它的title_or_id方法。
with標記符把一個(gè)對象推進(jìn)到DTML名稱(chēng)空間。變量首先在被加入的對象中查找。
句法
with標記符句法:
<dtml-with Variable|expr=”Expression”>
</dtml-with>
with 標記符是一種塊標記符。它在with塊的持續期間內把指定的變量或變量表達式推進(jìn)到DTML名稱(chēng)空間中。這樣,首先就在被添加的對象中查找名稱(chēng)。
屬性
l only——限制DTML名稱(chēng)空間,使之僅包含在with標記符中定義的名稱(chēng)空間。
l mapping——表示變量或表達式是一個(gè)映射對象。這樣就確保在映射對象里正確查找變量。
例子
在REQUEST里查找一個(gè)變量:
<dtml-with REQUEST only>
<dtml-if id>
<dtml-var id>
<dtml-else>
‘id’ was not in the request.
</dtml-if>
</dtml-with>
把first child添加到DTML名稱(chēng)空間:
<dtml-with expr=”objectValues()[0]”>
First child‘s id: <dtml-var id>
</dtml-with>
參見(jiàn)
let 標記符
聯(lián)系客服