文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>在kid页面中自动帮你选择checkbox或radio框

在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):
   @expose("autocheckbox.templates.abc")
   def ret(self):
      items = "ABCD"
      items_selected="AB"
      return dict(items=items,items_selected=items_selected)


我们可以通过在浏览器访问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>
<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
  所以页面代码为
 
  
<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):
    return '' if bool else 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}  

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

  </div>
</body>
</html>

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载