用于z3c.form的文件小部件,使用grok

dolmen.widget.file的Python项目详细描述


dolmen.widget.file是一个与 dolmen.file。它提供了一种可用且可插入的方式来呈现 dolmen.file.filefieldz3c.form.form中,使用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自适应来获得大小 要显示的文件的。
  • 已清理依赖项。当 可能的。

0.1(2009-10-21)

  • 初始版本

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

推荐PyPI第三方库


热门话题
java问题,包括来自非索引存储库的依赖关系   java lombok项目是否支持openjdk 11?   使用自定义摄像头的java在不同的安卓设备上会遇到很多问题   java如何在我的所有集成测试文件上执行beforeach   EclipseJava。lang.NoClassDefFoundError:org/java/plugin/ExtensionPoint   java Android陷入了从SQLite获取本周数据的困境   ClientResponseFilter中的java注入EJB   java读取Elasticsearch,Spark获取精确字段   java如何检查一个列表是否具有与另一个列表相同的元素,并且能够有重复的元素   java印地语文本验证按钮+selenium中的哪个   http如何使用Java发出多部分/formdata POST请求?   java在imageview上启动活动单击自定义阵列适配器   java如何根据表的第二列中的值设置第一列中的复选框?   javamysql与JDBC的连接