File widget for z3c.form, using Grok
Project description
dolmen.widget.file is a package that walks hand-in-hand with dolmen.file. It provides a useable and pluggable way to render the dolmen.file.FileField in a z3c.form.Form, using Grok (through megrok.z3cform.base)
Example
We are going to develop here a small example, to demonstrate the use of dolmen.widget.file. First, we need to create a model content with a file field:
>>> 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'])
We now have a travel mammoth on which we can add a luggage. Now, we need a form to edit the animal:
>>> from megrok.z3cform.base import EditForm >>> class EditMammoth(EditForm): ... grok.name('edit') ... grok.context(ITravelMount) >>> grok.testing.grok_component('edit', EditMammoth) True
Let’s instanciate a Mammoth and try to call the form on it:
>>> 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>
Now, let’s try with a value:
>>> 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>
Changelog
0.1 (2009-10-21)
Initial release
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
dolmen.widget.file-0.1.tar.gz
(6.4 kB
view hashes)