Z3C表单构造工具

plone.autoform的Python项目详细描述


plone.autoform

简介

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 AutoExtensibleForm
0

在超级模型中,XML字段集是通过在 标记:

>>> from plone.autoform.form import AutoExtensibleForm
1

更改字段的小部件

通常,z3c.form会根据字段的类型选择小部件。 您可以使用 小部件更改小部件如果你想的话,可以直接 以不同格式输入或查看数据的用户。例如, 在这里,我们将 human 字段的小部件更改为使用yes/no 单选按钮而不是复选框:

>>> from plone.autoform.form import AutoExtensibleForm
2

您还可以传递小部件参数来控制 小装置。例如,这里我们保留默认的小部件,但是 设置css类:

>>> from plone.autoform.form import AutoExtensibleForm
3

在supermodel xml中,使用 <;form:widget>; 标记指定小部件,其中 可以有自己的元素指定参数:

>>> from plone.autoform.form import AutoExtensibleForm
4

注意:为了包含在模式的XML表示中, widget参数必须由widgetExportImportHandler实用程序处理。 有一个默认的处理在 z3c.form.browser.interfaces.ihtmlformelement

使用权限保护字段

默认情况下,无论用户的 权限。可以使用 读取权限保护字段 以及 写入权限 指令。当 该字段处于显示模式,并且当 字段处于输入模式。该许可应与其 Zope 3样式名称(即cmf.manage portal而不是"manage portal")。

在本例中, secret 字段受 cmf.manageportal 同时作为读写权限的权限。 这意味着在显示和输入模式下,字段将 只有拥有此权限的用户才能在表单中填写:

>>> from plone.autoform.form import AutoExtensibleForm
5

在supermodel xml中,指令是security:read permission和 安全性:写入权限

>>> from plone.autoform.form import AutoExtensibleForm
6

显示表单

有时,您希望显示 基于相同架构的存储值。这可以使用"显示表单"来完成。 显示窗体以"显示模式"呈现每个字段的小部件,这意味着 它以只读形式显示字段值,而不是作为表单输入。

要使用显示窗体,请创建一个像这样扩展widgetsview的视图:

< Buff行情>
>>> from plone.autoform.form import AutoExtensibleForm
7

若要呈现窗体,请不要重写 \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中的模式。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javapojo到org。布森。文件,反之亦然   java突然增加了G1老一代的承诺内存,减少了Eden的大小   java为什么对多个RXJava观察对象不执行并行执行?   java中的枚举是故障安全的吗?如果是,怎么做?   java是等待字符串变为相等的正确方法   java CodeAbbey挑战14个数据输入问题?   在java中的任意位置插入。util。列表   java替换html中的值   java需要帮助破译一个小堆栈跟踪:我使用的是哪种WS?   java Guice依赖项注入器空指针异常   java如何在3D引擎中实现视图剪裁平面?   JavaEclipseRCP:操作与命令需要更新   java如何使用XPAGES DesignerFacesServlet显示泰语字母(以及另一个亚洲/阿拉伯字母)   java装饰器模式问题   java我对空间复杂性的分析正确吗?   不显示java OpenGL ES 2纹理   使用java问题中的wc命令计算行数   java为什么空指针异常取决于条件的顺序?   Java日期在同一天或同一个月   java在使用lambda表达式时在变量中存储一些值