用于z3c.form的文件小部件,使用grok
dolmen.widget.file的Python项目详细描述
dolmen.widget.file是一个与 dolmen.file。它提供了一种可用且可插入的方式来呈现 dolmen.file.filefield在z3c.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)
- 初始版本