How to install dolmen.widget.file
- Download and install ActivePython
- Open Command Prompt
- Type
pypm install dolmen.widget.file
Dependencies
- distribute
- dolmen.file>=0.5.1
- grokcore.component
- grokcore.view
- zeam.form.base>=1.0
- zeam.form.ztk>=1.0
- zope.i18n
- zope.i18nmessageid
- zope.interface
- zope.location
- zope.size
- zope.traversing
- [test] zope.app.testing
- [test] zope.component
- [test] zope.container
- [test] zope.i18n
- [test] zope.publisher
- [test] zope.schema
- [test] zope.security
- [test] zope.site
- [test] zope.testing
Lastest release
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 zeam.form Form.
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 zeam.form.ztk import Form, Fields >>> class EditMammoth(Form): ... grok.name('edit') ... grok.context(ITravelMount) ... ignoreContent = False ... fields = Fields(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.fieldWidgets.get('form.field.luggage').render() <div id="form-field-luggage"> <input type="file" id="form-field-luggage-input" name="form.field.luggage" /> </div>
Now, let's try with a value:
>>> manfred.luggage = "A nice data" >>> form = getMultiAdapter((manfred, request), name='edit') >>> form.updateWidgets() >>> print form.fieldWidgets.get('form.field.luggage').render() <div id="form-field-luggage"> <div> <input type="radio" value="keep" checked="checked" class="noborder" name="form.field.luggage.action" onclick="document.getElementById('form-field-luggage-input').disabled=true" id="form-field-luggage-action" /> <label for="form-field-luggage-action">Keep existing file</label> <br /> <input type="radio" value="delete" class="noborder" name="form.field.luggage.action" onclick="document.getElementById('form-field-luggage-input').disabled=true" id="form-field-luggage-delete" /> <label for="form-field-luggage-delete">Delete existing file</label> <br /> <input type="radio" value="replace" class="noborder" name="form.field.luggage.action" onclick="document.getElementById('form-field-luggage-input').disabled=false" id="form-field-luggage-replace" /> <label for="form-field-luggage-replace">Replace with new file</label> </div> <div> <input type="file" id="form-field-luggage-input" name="form.field.luggage" /> <script type="text/javascript">document.getElementById('form-field-luggage-input').disabled=true;</script> </div> </div>
Changelog
1.0b2 (2010-11-22)
- We now retrieve the form content using the proper API (getContentData / getContent).
1.0b1 (2010-07-05)
- The field adapter is now registered using the latest zeam.form.base entry points system. This solves definitly the priority problems in the registration process.
- The widget mode registration is now done using the __str__ representation of the appropriate markers.
1.0a3 (2010-06-25)
- We no longer user the registerField function from zeam.form.ztk, but directly provide the adapter thanks to Grok, instead. This solves initialisation priority preventing the correct field registration.
1.0a2 (2010-06-19)
- Corrected a bug that allowed actions to appear when form submission errors occured.
1.0a1 (2010-05-14)
- Major change : the widget is now meant to be used in zeam.form. Dolmen is no longer using z3c.form.
- French translations have been added.
- The HTML code of the widget has been improved.
0.2 (2010-03-01)
- Code base has been cleaned to be pep8 compliant.
- We are now using the zope.size.ISized adaptation to get the size of the file to display.
- Cleaned dependencies. zope.app dependencies have been severed when possible.
0.1 (2009-10-21)
- Initial release