在kid页面中自动帮你选择checkbox或radio框
时间:2008-08-24 来源:MotsQueen
步骤是,(1)提交当前页面选择到数据库中,同时保存到session中,(2)如果回到原来页面,判断session中有无值,有,根据其中的值,自动帮你选好。
我们只是关注把值传到页面中,看看在kid模板中如何自动实现。
原理其实非常简单
<input type="checkbox" checked/> 默认选择
<input type="checkbox" /> 默认不选择
1.新建turbogears项目,
d:/project>tg-admin quickstart AutoCheckbox
默认回车两次,自动生成所需要的目录结构。
d:/project>cd AutoCheckbox.
2.在controllers.py中,
class Root(controller.RootController): |
我们可以通过在浏览器访问http://lcoalhost:8080/ret来查看结果。
把items和items_selected传入到tempaltes.abc模板中,下一步在指定的目录下生成模板。
进入templates目录。为简单起见,直接copy目录下的,welcome.kid => abc.kid
..>cd templates
..>copy welcome.kid abc.kid
3.在abc.kid中,删除<body></body>之间的内容。添加所需的内容。
<body>
或者
<body> |
看到了吧,关键在于<.. checked="" or None..>
对于kid模板来说,如果标签的属性如checked="",在编译生成xhtml时保留它为checked="True",
如果checked=None,则在编译时,会去掉这个属性。
所以在我们自动选择的项,checked="", 否则checked=None, 就这么简单。
我们有两种方式来实现它。
(1)直接利用checked=${(None,'')[True or False]}
(None,'')[boolean value]
能看懂吗,如果你直接在python交互式环境中输入,其实就明白了,
在python中,[False]==>[0], [True]==>[1]
(None,'')[0] = None, (None,'')[1] == ''。这下明白了?
checked=${(None,'')[True or False]}
如果[True], checked=""
如果[False], checked=None
所以页面代码为
<html xmlns:py="http://purl.org/kid/ns#"> <body> <div py:for="item in items" py:strip="True"> <input type="checkbox" name="itemselected" value="${item} checked="${(None,'')[item in items_selected]}">${item}</input> </div> </body> </html> |
简单解释下,
py:for,py:strip, pycontent是kid中的xml方法,py:for类似于python中的for用法,${expression},kid把出现${}地方用其中的expression表达式替换。
用py:for取出ABCD中的每一个给item。判断item in items_selected(AC)中,如果在其中,checked='',不在其中的话checked=None.
另外一种方式在kid中。在py:attrs="checked=..."
<?python
def checker(bool):
?>
<html xmlns:py="http://purl.org/kid/ns#"> py:attrs="checked=checker(item in items_selected)">${item}</input>
</div> |