
提供者:Python世界:杜文山 (http://www.dohao.org/python)
文档模板标记语言(DTML)是一种便捷的内置于Zope中的模板和表现语言。这个文档涉及所有的DTML标记符和它们的使用方法。
[separator]
call标记符使你能够调用一个方法而不把结果插入到DTML。
句法
call标记符句法:
<dtml-call Variable|expr=”Expression”>
如果call标记符使用一个变量,DTML自动传递方法的参数——就像var标记符那样。如果在一个表达式里指定方法,那么你必须亲自传递参数。
例子
用变量名称调用:
<dtml-call UpdateInfo>
它调用UpdateInfo 对象,自动传递参数。
用表达式调用:
<dtml-call expr=”RESPONSE.setHeader(‘content-type’, ‘text/plain’)”>
参见
var tag
comment 标记符使你能够用注释为DTML做注解。你还可以用它把DTML注释掉,让DTML标记符暂时失效。
句法
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的绝对值。参数可以为一个普通整数或长整数或一个浮点数。如果参数是一个复数,则返回它的量值。
l chr(integer)——返回一个字符,这个字符的ASCII 代码是参数integer。例如,chr(97)返回字符a。相反的函数为ord()。参数必需在0 至 255范围内,如果integer 超出了那个范围就引发一个ValueError 错误。
l DateTime()——返回一个已知构造参数的Zope DateTime对象。有关构造参数的更多信息请参见附录B“API参考”中的“DateTime类”部分。
l divmod(number, number)——采用两个数字作为参数并在使用长除法时返回一对由它们的商和余数组成的数字。对于混合操作数类型,应用二进制算法操作符规则。对于普通和长整数,结果等同于(a / b, a % b)。对于浮点数,结果是 (q, a % b),其中q是math.floor(a / b);然而,它可能会是1,小于那个数。在任何情况中,q * b + a % b 非常接近a。如果a % b是非0,它有和b相同的符号并且0 <= abs(a % b) < abs(b)。
l float(number)——把一个字符串或一个数字转换成浮点数。如果参数是一个字符串,它必需包含一个可能带有符号的小数或者用空格嵌入的浮点数;它的作用等同于string.atof(number)。另外,参数可以是一个普通整数或长整数或者一个浮点数,如果是浮点数,返回相同的值(在Python的浮点精度以内)。
l getattr(object, string)——返回对象的被指定的属性的值。名称必需为一个字符串。如果string 是对象中的某个属性的名称,结果就是那个属性的值。例如,getattr(x, "foobar”) 等同于x.foobar。如果被指定的属性不存在,提供了默认值就返回默认值,否则就引发一个AttributeError 错误。
l getitem(variable, render=0)——返回一个DTML变量的值。如果render 为真,变量就被呈递。见render 函数。
l hasattr(object, string)——参数是一个对象和一个字符串。如果这个字符串是对象的某个属性的名称,结果为1,否则结果为0。(这是通过调用getattr(object, name) 和查看它是否引发一个例外来实现的。)
l hash(object)——返回对象的散列值(如果它有的话)。散列值是整数。它们用于在一个字典查找期间内快速比较字典键。相等的数字值有相同的散列值(即使它们属于不同的类型,例如1和1.0)。
l has_key(variable)——如果DTML名称空间包含variable则返回真。
l hex(integer)——把一个整数(任意大小)转换成十六进制的字符。结果是一个有效的Python表达式。注意:这常常产生一个无符号的文字。例如在32-bit 机器上,hex(-1) 结果为0xffffffff。当在一个机器上使用相同的单词大小求值时,这个文字认为是-1;对于不同的单词大小,它可能会变成大的正数或引发一个OverflowError 例外。
l int(number)——把一个字符串或数字转换成一个普通整数。如果参数是一个字符串,它必须包含一个可能带有符号的十进制数字,这个数字可以作为一个Python整数提供,并且通过空格嵌入其中。这个行为等同于 'string.atoi(number[, radix])’ 。radix 参数给出了转换的基数并且可以是2到36 范围内的任何整数。如果指定了radix并且number不是一个字符串,引发一个 TypeError 错误。另外,参数可以是一个普通整数或长整数或浮点数。浮点数转换成整数按照 C 语言的方法来定义;通常,转换是把小数点后面数字趋向为零。
l len(sequence)——返回对象的长度(数据项的数量)。参数可以为一个序列或一个映射(字典)。
l max(s)——s 参数(例如,一个字符串,元组或列表)唯一时返回非空序列中的最大项。当有多个参数,它返回参数中的最大一个。
l min(s)——s 参数(例如,一个字符串,元组或列表)唯一时返回非空序列中的最小项。当有多个参数时,它返回参数中的最大一个。
l namespace([name=value]...)——返回一个新的DTML名称空间对象。关键字参数name=value 对被加入到新的名称空间中。
l oct(integer)——把一个整数(任意大小)转换成八进制字符。结果是一个有效的Python表达式。注意:这总是生成一个无正负符号的文字。例如,在一个32-bit 机器上, oct(-1) 生成037777777777。当在一个具有相同单词大小的机器上求值时,这个文字结果为-1;对于一个不同的单词大小,它可能生成一个大整数或引发一个OverflowError 例外。
l ord(character)——返回某个字符的ASCII 值。例如,ord("a") 返回整数97 。相反的函数为chr() 。
l pow(x, y [,z])——返回x的y次方。如果提供了z,它首先求x的y方,再对z求余,返回结果(执行效率高于 'pow(x, y) % z’)。参数必须为数字类型。对于混合操作数类型,应用二进制算法操作符规则。有效的操作数类型也是结果的类型,如果结果不表现为这种类型,函数引发一个例外,例如pow(2, -1) 或 pow(2, 35000)是不允许的。
l range([start,] stop [,step])——这是一个用于创建含有算术级数的列表的通用函数。参数必需为普通整数。如果step 参数被忽略,默认为1。如果start 参数被忽略,默认为0。返回的完整形式是一个普通整数列表 '[sstart, start + step, start + 2 * step, ...]’。如果step 是正数,最后一个元素是小于stop的最大'start + i step’ ;如果step 是一个负数,最后一个元素是大于stop的最大'start + i step’ 。step 不得为0(否则引发一个ValueError 错误)。
l round(x [,n])——返回x被四舍五入后的浮点值,它截至小数点后n位。如果n被忽略,它默认为零。结果是一个浮点数。值被四舍五入到最接近的10的负n次幂处的倍数;如果两个倍数一样近,四舍五入选择远离0的那个(例如,round (0.5)为1.0 ,round (-0.5) 为-1.0) 。
l render(object)——呈递对象。对于DTML 对象,它使用当前的名称空间对DTML求值。对于其他对象,它等同于str(object) 。
l reorder(s [,with] [,without])——对s中的数据项根据在with中给定的顺序重新排序,不包括在without中提到的数据项。s中没有在with中提到的数据项被删除。s、with和without都是字符序列或键值元组序列,对键进行排序。这个函数对于构建有序的选择列表是有用的。
l SecurityCalledByExecutable()——如果当前的对象(例如DTML文档或方法)由一个可执行对象(例如其它的DTML文档或方法,脚本或SQL方法)调用则返回真。
l SecurityCheckPermission(permission, object)——检查安全关联是否允许给定对象上的给定许可。例如'ecurityCheckPermission('Add Documents, Images, and Files”, this())’,如果当前的用户被授权能够在当前位置中创建文档、图像和文件,这个函数将返回真。
l SecurityGetUser()——返回当前用户对象。通常,它等同于REQUEST.AUTHENTICATED_USER 对象。然而,AUTHENTICATED_USER对象是不安全的,这是因为它可以被替换。
l SecurityValidate([object] [,parent] [,name] [,value])——如果当前用户可以访问value则返回真。object 是被访问的变量所在的对象,parent 是变量的容器,name 是用于访问变量的名称(例如,如果它通过'getattr’获得)。你可以忽略其中的一些参数。但是,最好提供所有的参数。
l SecurityValidateValue(object)——如果对于当前用户是可访问的则返回真。这个函数等同于调用SecurityValidate(None, None, None, object) 。
l str(object)——返回一个包含一个适当的可打印出的表示对象的字符串。对于字符串,它返回字符串本身。
l test(condition, result [,condition, result]... [,default])——对一对或多对condition, result 进行测试并返回第一个条件为真的的结果。只返回一个结果,即使有多个条件为真。如果没有条件为真并且给定默认值,那么就返回默认值。如果没有条件为真并且没有默认值,返回None 。
属性
l None——None 对象等同于Python的内建对象None。它通常用于表示一个空或假值。
参见
string module
random module
math module
Python 内建函数 (http://www.python.org/doc/current/lib/built-in-funcs.html)
根据条件,if标记符使你能够测试条件并且采取不同的行为。if标记符反映Python的 if/elif/else 条件测试语句。
句法
if标记符句法:
<dtml-if ConditionVariable|expr=”ConditionExpression”>
[<dtml-elif ConditionVariable|expr=”ConditionExpression”>]
...
[<dtml-else>]
</dtml-if>
if标记符是一种块标记符。if标记符和可选择的elif 标记符使用一个条件变量名称或一个条件表达式,但只能是其中的一种。如果条件名称或表达式的值为真,那么if块被执行。真意味着不是0、空字符串或一个空列表。如果条件变量没有被找到,那么这个条件被认为是假。
如果初始的条件为假,则按次序测试elif 条件。如果elif 条件为真,那么块中的内容就被执行。最终如果if和elif 条件没有为真的,就执行可选的else块。则只有一个块被执行。
例子
测试一个变量:
<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>
参见
Python指南: if 语句
(http://www.python.org/doc/current/tut/node6.html#SECTION006100000000000000000)
in标记符可以让你有力的控制循环序列和执行批处理。
句法
in标记符句法:
<dtml-in SequenceVariable|expr="SequenceExpression”>
[<dtml-else>]
</dtml-in>
in块针对序列变量或序列表达式中的每一项重复一次。当前项在每次执行in块时被推入到DTML名称空间中。
如果在序列中没有数据项是变量或表达式,则执行可选的else块。
属性
l mapping——叠代映射对象而不是实例。这使得映射对象的值可以作为DTML变量被访问。
l reverse——翻转序列。
l sort=string——按照给定的属性名称对序列排序。
l start=int——要被显示的第一项的数字,其中数据项计数从1开始。
l end=int——要被显示的最后一项的数字,其中数据项计数从1开始。
l size=int——批处理的大小。
l skip_unauthorized——如果遇到一个没有授权的数据项不引发一个例外。
l orphan=int——预期最小批处理大小。
l overlap=int——批处理块之间相互重叠的数据项的数字。默认为3。
l previous——如果有前一个批处理块则叠代一次。为前一个序列设置批处理变量。
l next——如果有下一个批处理块则叠代一次。为下一个序列设置批处理变量。
标记符变量
当前数据项变量。
这些变量描述当前的数据项:
l sequence-item——当前的数据项。
l sequence-key——当前键字。当循环表单元组(key,value)时,in标记符把它们转换成 (sequence-key, sequence-item) 。
l sequence-index——当前数据项从0开始的索引。
l sequence-number——当前数据项从1开始的索引。
l sequence-roman——当前数据项以小写罗马数字表示的索引。
l sequence-Roman——当前数据项以大写罗马数字表示的索引。
l sequence-letter——当前数据项以小写字母表示的索引。
l sequence-Letter——当前数据项以大写字母表示的索引。
l sequence-start——如果当前数据项为第一个数据项则为真。
l sequence-end——如果当前数据项为最后一个数据项则为真。
l sequence-even——如果当前数据项索引为偶数则为真。
l sequence-odd——如果当前数据项索引为奇数则为真。
l sequence-length——序列的长度。
l sequence-var-variable——在当前数据项中的一个变量。例如,sequence-var-title是当前数据项的标题变量。通常,你可以直接访问这个变量,这是因为当前的数据项被推到DTML名称空间中。而且,当显示前一个和下一个批处理信息时这些变量就可以被用上。
l sequence-index-variable——当前数据项的变量索引。
总结变量
这些变量总结了有关数据项变量数字方面的信息。要使用这些变量,你必须循环含有数字变量的对象(比如数据库查询结果)。
l total-variable——一个数据项变量的所有实例的总数。
l count-variable——一个数据项变量的实例数。
l min-variable——一个数据项变量的最小值。
l max-variable——一个数据项变量的最大值。
l mean-variable——一个数据项变量的平均值。
l variance-variable——一个数据项的count-1 自由度方差。
l variance-n-variable——一个数据项变量的n自由度方差。
l standard-deviation-variable——一个数据项变量的count-1 自由度标准偏差
l standard-deviation-n-variable——一个数据项变量的n自由度标准偏差。
分组变量
这些变量使你能够跟踪当前数据项变量的变化:
l first-variable——如果当前数据项是第一个具有特定变量值的数据项则为真。
l last-variable——如果当前数据项是最后一个具有特定变量值的数据项则为真。
批处理变量
l sequence-query——不包含start变量的查询字符。你可以使用这个变量来构建与下一个和前一个批处理块的链接。
l