跳转到主要内容

z3c.form 的文件小部件,使用Grok

项目描述

dolmen.widget.file 是一个与 dolmen.file 并肩发展的包。它提供了一种可使用和可插入的方式,在 z3c.form.Form 中渲染 dolmen.file.FileField ,使用 Grok(通过 megrok.z3cform.base

示例

我们将在这里开发一个小示例,以展示 dolmen.widget.file 的使用。首先,我们需要创建一个具有文件字段的模型内容

>>> import dolmen.file
>>> import grokcore.component as grok
>>> from zope.interface import Interface
>>> from zope.schema.fieldproperty import FieldProperty


>>> class ITravelMount(Interface):
...   luggage = dolmen.file.FileField(title=u'Luggages')


>>> class Mammoth(grok.Context):
...   grok.implements(ITravelMount)
...   luggage = FieldProperty(ITravelMount['luggage'])

我们现在有一个旅行猛犸象,我们可以在它上面添加行李。现在,我们需要一个表单来编辑这个动物

>>> from megrok.z3cform.base import EditForm
>>> class EditMammoth(EditForm):
...    grok.name('edit')
...    grok.context(ITravelMount)

>>> grok.testing.grok_component('edit', EditMammoth)
True

让我们实例化一个猛犸象并尝试在它上面调用表单

>>> from zope.component import getMultiAdapter
>>> from zope.publisher.browser import TestRequest

>>> manfred = Mammoth()
>>> request = TestRequest()

>>> form = getMultiAdapter((manfred, request), name='edit')
>>> form.updateWidgets()
>>> print form.widgets['luggage'].render()
<span id="form-widgets-luggage"
      class="file-widget required filefield-field">
<BLANKLINE>
<BLANKLINE>
<BLANKLINE>
    <input type="file" id="form-widgets-luggage-input"
           name="form.widgets.luggage" />
<BLANKLINE>
<BLANKLINE>
</span>
<BLANKLINE>

现在,让我们尝试使用一个值

>>> manfred.luggage = "A nice data"
>>> form = getMultiAdapter((manfred, request), name='edit')
>>> form.updateWidgets()
>>> print form.widgets['luggage'].render()
<span id="form-widgets-luggage"
    class="file-widget required filefield-field">
<BLANKLINE>
  <div style="padding-top: 1em;">
  <input type="radio" value="nochange" checked="checked"
       class="noborder"
       name="form.widgets.luggage.nochange"
           onclick="document.getElementById('form-widgets-luggage-input').disabled=true"
           id="form-widgets-luggage-nochange" />
  <label for="form-widgets-luggage-nochange">Keep existing file</label>
    <br />
<BLANKLINE>
    <label for="form-widgets-luggage-delete">Delete existing file</label>
  <br />
  <input type="radio" value="" class="noborder"
         name="form.widgets.luggage.nochange"
         onclick="document.getElementById('form-widgets-luggage-input').disabled=false"
         id="form-widgets-luggage-replace" />
      <label for="form-widgets-luggage-replace">Replace with new file</label>
</div>
  <div style="padding-left: 1.5em; padding-top: 0.5em;">
  <input type="file" id="form-widgets-luggage-input"
           name="form.widgets.luggage" />
  <script type="text/javascript">document.getElementById('form-widgets-luggage-input').disabled=true;</script>
  </div>
</span>
<BLANKLINE>

变更日志

0.2 (2010-03-01)

  • 代码库已被清理,以符合 pep8 标准。

  • 我们现在使用 zope.size.ISized 适配器来获取要显示的文件大小。

  • 清理了依赖项。在可能的情况下已断开 zope.app 的依赖关系。

0.1 (2009-10-21)

  • 初始版本

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

dolmen.widget.file-0.2.tar.gz (6.6 kB 查看哈希值)

上传时间:

支持者