用于创建表格的grok插件
megrok.z3cform.tabular的Python项目详细描述
在这个包的帮助下,您可以在表单中创建表。 考虑一个文件夹列表,其中第一个文件夹上有一个复选框 列,您可以检查要修改的行。 这样的修改例如:
表格是基于这些现有的MEROGK软件包:
- edit
- delete
- change workflow state
- megrok.layout
- megrok.z3ctable
- megrok.z3cform.base
- megrok.z3cform.ui
示例
首先,我们必须用一些对象设置一个容器。
>>> from zope.app.testing.functional import getRootFolder >>> root = getRootFolder()>>> from zope.app.container import btree >>> class Container(btree.BTreeContainer): ... """Sample container.""" ... __name__ = u'container' >>> container = Container()>>> root['container'] = container>>> class Content(object): ... """Sample content.""" ... def __init__(self, title, number): ... self.title = title ... self.number = number>>> container[u'first'] = Content('First', 1) >>> container[u'second'] = Content('Second', 2) >>> container[u'third'] = Content('Third', 3)>>> len(container) 3
好了,现在我们有一个包含三个对象的容器。现在我们 可以为此容器创建表格视图:
>>> from megrok.z3cform.tabular import FormTable >>> import grokcore.component as grok >>> from megrok.z3cform.base import button, extends>>> class FormTableView(FormTable): ... grok.context(Container) ... extends(FormTable) ... ... @button.buttonAndHandler(u'ChangeWorkflowState') ... def handleChangeWorkflowState(self, action): ... print 'success' ... ... def render(self): ... return self.renderFormTable()>>> grok.testing.grok_component('formtableview', FormTableView) True>>> from megrok.z3ctable import table, CheckBoxColumn, NameColumn >>> class CheckBox(CheckBoxColumn): ... grok.name('checkBox') ... grok.context(Container) ... table(FormTableView)>>> grok.testing.grok_component('checkbox', CheckBox) True>>> class Name(NameColumn): ... grok.name('name') ... grok.context(Container) ... table(FormTableView)>>> grok.testing.grok_component('name', Name) True
现在我们可以调用容器上的formTableView。我们 应该看到一个有三行两列的表。 有一个默认的取消按钮和我们的自定义 更改工作流状态按钮。
>>> from zope.publisher.browser import TestRequest >>> request = TestRequest()>>> from zope.component import getMultiAdapter >>> formtableview = getMultiAdapter((container, request), name="formtableview") >>> formtableview <FormTableView 'formtableview'>>>> formtableview.update() >>> print formtableview() <form action="http://127.0.0.1" method="post" enctype="multipart/form-data" class="edit-form" name="formTable" id="formTable"> <div class="viewspace"> <div> <div class="tabluarTable"> <table class="contents"> <thead> <tr> <th>Name</th> <th>X</th> </tr> </thead> <tbody> <tr class="even"> <td>first</td> <td><input type="checkbox" class="checkbox-widget" name="formTable-checkBox-1-selectedItems" value="first" /></td> </tr> <tr class="odd"> <td>second</td> <td><input type="checkbox" class="checkbox-widget" name="formTable-checkBox-1-selectedItems" value="second" /></td> </tr> <tr class="even"> <td>third</td> <td><input type="checkbox" class="checkbox-widget" name="formTable-checkBox-1-selectedItems" value="third" /></td> </tr> </tbody> </table> </div> <div class="tabluarForm"> </div> </div> </div> <div> <div class="buttons"> <input id="formTable-buttons-cancel" name="formTable.buttons.cancel" class="submit-widget button-field" value="Cancel" type="submit" /> <input id="formTable-buttons-changeworkflowstate" name="formTable.buttons.changeworkflowstate" class="submit-widget button-field" value="ChangeWorkflowState" type="submit" /> </div> </div> </form>
这个包与megrok.layout配合得很好。还有一些额外的 基类可用。请看一下测试。
享受…
变更日志
0.2(2009-10-26)
- 更改项目的说明。
0.1(2009-10-26)
- 初始版本