Chinaunix首页 | 论坛 | 博客
  • 博客访问: 175294
  • 博文数量: 15
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 375
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-06 20:00
文章分类

全部博文(15)

文章存档

2009年(2)

2008年(13)

我的朋友

分类: Python/Ruby

2008-08-24 11:24:31

    在很多系统中,我们需要让页面记住我们的选择框,如调查问卷,试题选择页面,在分页提交后,回来仍能显示你以前的选择。
    步骤是,(1)提交当前页面选择到数据库中,同时保存到session中,(2)如果回到原来页面,判断session中有无值,有,根据其中的值,自动帮你选好。
    我们只是关注把值传到页面中,看看在kid模板中如何自动实现。
原理其实非常简单
   默认选择
   默认不选择

1.新建turbogears项目,
  d:/project>tg-admin quickstart AutoCheckbox
  默认回车两次,自动生成所需要的目录结构。
  d:/project>cd AutoCheckbox.
2.在controllers.py中,     
  

class Root(controller.RootController):
   @expose("autocheckbox.templates.abc")
   def ret(self):
      items = "ABCD"
      items_selected="AB"
      return dict(items=items,items_selected=items_selected)


我们可以通过在浏览器访问来查看结果。

把items和items_selected传入到tempaltes.abc模板中,下一步在指定的目录下生成模板。
进入templates目录。为简单起见,直接copy目录下的,welcome.kid => abc.kid
..>cd templates
..>copy welcome.kid abc.kid
3.在abc.kid中,删除 之间的内容。添加所需的内容。

<body>
<input type="checkbox" checked=""/>
</body>

或者

<body>
<input type="checkbox" checked=None/>

</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
  所以页面代码为
 
  


 

      value="${item}
     checked="${(None,'')[item in items_selected]}">${item}
 




简单解释下,
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=..."


def checker(bool):
    return '' if bool else None

?>



 


      value="${item}  

       py:attrs="checked=checker(item in items_selected)">${item}

 



阅读(1416) | 评论(1) | 转发(0) |
0

上一篇:python decorator

下一篇:TG有感

给主人留下些什么吧!~~

chinaunix网友2008-08-24 23:38:48

可以留言吗?