Z3C表单构造工具
plone.autoform的Python项目详细描述
plone.autoform
内容
- plone.autoform
- 源代码
-
更改日志
- 1.8.1(2018-10-31)
- 1.8.0(2018-09-26)
- 1.7.5(2018-02-04)
- 1.7.4(2017-11-24)
- 1.7.3(2017-06-03)
- 1.7.2(2017-04-01)
- 1.7.1(2017-02-12)
- 1.7.0(2016-06-07)
- 1.6.2(2016-02-20)
- 1.6.1(2014-10-20)
- 1.6(2014-02-22)
- 1.5(2013-08-14)
- 1.4(2013-05-23)
- 1.3(2012-08-30)
- 1.2(2012-04-15)
- 1.1-2012-02-20
- 1.0-2011-05-13
- 1.0b7-2011-04-29
- 1.0b6-2011-02-11
- 1.0b5-2011-01-11
- 1.0b4-2010-08-05
- 1.0b3-2010-04-20
- 1.0b2-2009-07-12
- 1.0b1-2009-04-17
简介
plone.autoform 根据模型(模式)构建自定义的 z3c.form 表单 包括哪些字段以及每个字段应使用哪些小部件和选项 字段。这个模型被定义为一个基于zope.schema的模式,但是附加的 可以提供提示来控制通常未指定的窗体显示的各个方面 在Zope模式中。
基于架构的基本表单
使用汽车自动窗体设置,在 表格:
>>> from plone.autoform.form import AutoExtensibleForm
然后提供 模式 (模式接口)和可选的 表单上的附加schemata(模式接口列表)属性:
class MyForm(AutoExtensibleForm, form.EditForm): schema = IMySchema additionalSchemata = (ISchemaOne, ISchemaTwo,) # ...
对于动态表单,您当然可以创建 模式 在属性中添加schemata 。例如,plone.dexterity扩展了 基本的autoextensibleform,因此 模式 是内容类型模式 additionalschemata 是与 行为。
控制表单呈现
可以在模式中指定指令来控制表单呈现的各个方面。
更改字段的显示模式
字段的小部件可以以多种"模式"显示:
- 输入-允许用户在字段中输入数据
- 显示-字段值的只读指示
- 隐藏-仅包含在HTML源代码中的字段值记录
可以使用 模式 指令控制模式:
from plone.supermodel import model from plone.autoform import directives as form class IMySchema(model.Schema): form.mode(secret='hidden') form.mode(IEditForm, secret='input') secret = schema.TextLine( title=u"Secret", default=u"Secret stuff (except on edit forms)" )
在这种情况下,对于大多数表单, secret 字段的模式设置为"hidden", 但对于提供ieditform接口的表单,则需要"输入"。
对应的supermodel xml指令是form:mode
<field type="zope.schema.TextLine" name="secret" form:mode="z3c.form.interfaces.IForm:hidden z3c.form.interfaces.IEditForm:input"> <title>Secret</title> <description>Secret stuff (except on edit forms)</description> </field>
如果所有窗体的模式都相同,则可以简短地指定该模式:
<field type="zope.schema.TextLine" name="secret" form:mode="hidden"> <title>Secret</title> <description>Secret stuff</description> </field>
换句话说, form:mode 可以是单一模式,也可以是分隔的空格 表单界面列表:模式对。
省略字段
字段可以从所有窗体或某些窗体中完全省略, 使用省略的 和不省略的 目录。在这个例子中, 所有表单中都省略了 dummy 字段,而 edit> 除提供 ieditform接口:
from z3c.form.interfaces import IEditForm from plone.supermodel import model from plone.autoform import directives as form class IMySchema(model.Schema): form.omitted('dummy') dummy = schema.Text( title=u"Dummy" ) form.omitted('edit_only') form.no_omit(IEditForm, 'edit_only') edit_only = schema.TextLine( title = u'Only included on edit forms', )
在超级模型XML中,可以指定为:
<field type="zope.schema.TextLine" name="dummy" form:omitted="true"> <title>Dummy</title> </field> <field type="zope.schema.TextLine" name="edit-only" form:omitted="z3c.form.interfaces.IForm:true z3c.form.interfaces.IEditForm:false"> <title>Only included on edit form</title> </field>
形式:省略 可以是单个布尔值,也可以是分隔的空格 表单界面列表:布尔对。
重新排序字段
使用 之前的顺序可以影响字段在窗体中的位置。 以及 在 指令之后进行排序。在本例中, not_last 字段 放在 摘要 字段之前,即使它是在之后定义的:
from plone.supermodel import model from plone.autoform import directives as form class IMySchema(model.Schema): summary = schema.Text( title=u"Summary", description=u"Summary of the body", readonly=True ) form.order_before(not_last='summary') not_last = schema.TextLine( title=u"Not last", )
传递给指令的值可以是"*"(指示在之前或之后 所有字段)或其他字段的名称。使用 '.fieldname' 引用 当前架构或基本架构中的字段。使用架构名称作为前缀(例如 'idpublincore.title' )引用另一个架构中的字段。使用一个 未固定的名称,用于引用当前架构或默认架构中的字段 表格。
在supermodel xml中,这些指令称为 form:before 和 form:after 。 例如:
<field type="zope.schema.TextLine" name="not_last" form:before="*"> <title>Not last</title> </field>
将字段组织为字段集
字段可以分组为字段集,这些字段集将在HTML中呈现 标记。在本例中, footer 和 dummy 字段 放置在 额外的 字段集中:
>>> from plone.autoform.form import AutoExtensibleForm0
在超级模型中,XML字段集是通过在 标记:
>>> from plone.autoform.form import AutoExtensibleForm1
更改字段的小部件
通常,z3c.form会根据字段的类型选择小部件。 您可以使用 小部件更改小部件如果你想的话,可以直接 以不同格式输入或查看数据的用户。例如, 在这里,我们将 human 字段的小部件更改为使用yes/no 单选按钮而不是复选框:
>>> from plone.autoform.form import AutoExtensibleForm2
您还可以传递小部件参数来控制 小装置。例如,这里我们保留默认的小部件,但是 设置css类:
>>> from plone.autoform.form import AutoExtensibleForm3
在supermodel xml中,使用 <;form:widget>; 标记指定小部件,其中 可以有自己的元素指定参数:
>>> from plone.autoform.form import AutoExtensibleForm4
注意:为了包含在模式的XML表示中, widget参数必须由widgetExportImportHandler实用程序处理。 有一个默认的处理在 z3c.form.browser.interfaces.ihtmlformelement
使用权限保护字段
默认情况下,无论用户的 权限。可以使用 读取权限保护字段 以及 写入权限 指令。当 该字段处于显示模式,并且当 字段处于输入模式。该许可应与其 Zope 3样式名称(即cmf.manage portal而不是"manage portal")。
在本例中, secret 字段受 cmf.manageportal 同时作为读写权限的权限。 这意味着在显示和输入模式下,字段将 只有拥有此权限的用户才能在表单中填写:
>>> from plone.autoform.form import AutoExtensibleForm5
在supermodel xml中,指令是security:read permission和 安全性:写入权限
>>> from plone.autoform.form import AutoExtensibleForm6
显示表单
有时,您希望显示 基于相同架构的存储值。这可以使用"显示表单"来完成。 显示窗体以"显示模式"呈现每个字段的小部件,这意味着 它以只读形式显示字段值,而不是作为表单输入。
要使用显示窗体,请创建一个像这样扩展widgetsview的视图:
< Buff行情>>>> from plone.autoform.form import AutoExtensibleForm7
若要呈现窗体,请不要重写 \u call\uuuu() 。相反,要么实现 方法,设置页面模板的索引属性,或者 其他可调用,或使用 <;浏览器:page/>; 的 模板属性 注册视图时使用zcml指令。
在模板中,您可以使用以下变量:
- view/w 是所有窗口小部件的字典,包括来自非默认窗口小部件的字典 fieldset(相反,widgets变量只包含那些 默认字段集中的小部件)。关键是字段名, 值是小部件实例。要呈现小部件(在显示模式下),可以 做 tal:replace="structure 视图/w/myfield/render"/>;
- 视图/字段集 是所有字段集(不包括 默认字段集,即那些未放入字段集中的小部件)。他们的钥匙 是字段集名称,值是字段集窗体实例, 它又有一个变量,比如给定所有窗口小部件的列表。
幕后:autoform指令如何工作
zope架构字段不允许存储与 一个特定的领域。但是,任意数据可以存储在 模式(接口)上的字典称为"标记值"。 这是 plone.autoform 跟踪其额外提示的地方, 它们是通过python指令、xml模型还是一些 其他方式。
标记值是st或在各种键下,这些键被定义 在 plone.autoform.interfaces 模块中。它们可以通过多种方式设置:
- 通过在界面上使用 setTaggedValue() 手动操作。
- 通过从a plone.supermodel xml文件加载模式并使用 格式: 前缀
- 在定义 python中的模式。