Package: grokcore.formlib
This package provides support for writing forms using the Zope Formlib
library and registering them directly in Python (without ZCML).ContentsSetting upgrokcore.formlibExamplesEdit formsDisplay formsGeneric formsAdd formsCustomizationAPI OverviewBase classesDecoratorsHelpersChanges4.0 (2023-08-28)3.0.1 (2018-01-12)3.0.0 (2018-01-04)1.11 (2016-06-20)1.10.1 (2016-02-15)1.10 (2015-04-01)1.10a1 (2013-11-22)1.9 (2012-05-01)1.8 (2010-11-03)1.7 (2010-11-01)1.6 (2010-10-18)1.5 (2009-12-13)1.4 (2009-09-17)1.3 (2009-09-16)1.2 (2009-07-20)1.1 (2009-01-07)1.0 (2008-09-25)Setting upgrokcore.formlibThis package is essentially set up like thegrokcore.componentpackage, please refer to its documentation for details.  The
additional ZCML lines you will need are:<include package="grokcore.formlib" file="meta.zcml" />
<include package="grokcore.formlib" />Put the first line somewhere near the top of your root ZCML file.ExamplesWe need an example interface:from zope import interface, schema

class IMammoth(interface.Interface):

   name = schema.TextLine(title=u"Name")
   age = schema.Int(title=u"Age", min=0)Edit formsYou can provide an edit form forIMammothlike this:from grokcore import formlib

class Edit(formlib.EditForm):

   formlib.context(IMammoth)If your content object is defined in the same Python file and
implementsgrokcore.formlib.IContext, then it will be the default
context for your form.Display formsDisplay forms are as easy as edit forms:class Index(formlib.DisplayForm):

   formlib.context(IMammoth)Generic formsYou can build more generic forms, providing your own actions for a form:class ISearch(interface.Interface):

    search = schema.TextLine(title=u"Text")After this, you define your form. It’s applied to a mammoth, but uses
theISearchinterface to generate fields:class Search(formlib.Form):

    formlib.context(IMammoth)

    form_fields = formlib.Fields(ISearch)

    def update(self):
        # Default search results are None
        self.search_result = None

    @formlib.action(u"Search")
    def search(self, text):
        self.search_result = 'something found with text'Create a custom templatesearch.ptto render your form (in a
directorymodulename_templates).Add formsAdd forms work like generic forms, you have to provide your actionAdd.CustomizationSince a Grok form is a Grok view, all configuration directives and
attributes available on a Grok view are available as well on a Grok
form.This means that you can customize your form by associating a template
with it. The template is responsible for displaying widgets and
actions. The API to access them is the same as on a Zope Formlib form.You can’t customize a form by providing arender()method on it,
but you can still use theupdate()method if you want.Please refer to the documentation ofgrokcore.viewfor more
details.API OverviewBase classesEditFormExtendsFormto create an edit form for your content.DisplayFormCreates simple display forms.FormIs a base class to create generic forms.AddFormExtendsFormto create add forms. You have to provide theaddaction which is going to create the new object.DecoratorsactionIs a decorator to create an action on the form. Your action only has
to accept values from the form as parameters.HelpersAutoFieldsCreate form fields from the given context. If the context is an
interface, Zope fields defined in that interface are going to be
used to build form fields.
If the context is a regular object, Zope fields of all implemented
interfaces of that object are going to used to build form fields.FieldsCreate and reorder fields on the form.Additionally, thegrokcore.formlibpackage exposes thegrokcore.component,grokcore.securityandgrokcore.viewAPIs.Changes4.0 (2023-08-28)Add support for Python 3.7, 3.8, 3.9, 3.10, 3.11.Drop support for Python 2.7, 3.4, 3.5, 3.6.3.0.1 (2018-01-12)Rearrange tests such that Travis CI can pick up all functional tests too.3.0.0 (2018-01-04)Python 3 compatibility.1.11 (2016-06-20)grok.actionwill now trigger validation errorsRequiredMissingfor required fields that not present at all in
the request.1.10.1 (2016-02-15)Update tests.1.10 (2015-04-01)Forms now notify the ObjectEditedEvent instead of the ObjectModifiedEvent.1.10a1 (2013-11-22)Add compatibility for CSRF protection feature in zope.formlib.1.9 (2012-05-01)Nothing changed yet.1.8 (2010-11-03)The context directive now has its own default computation.1.7 (2010-11-01)Update version requirements for martian, grokcore.component, grokcore.security
grokcore.view.1.6 (2010-10-18)Made package comply to zope.org repository policy.Update functional tests to zope.app.wsgi Browser instead of zope.app.testing
one.Don’t depend anymore on zope.app.zcmlfiles for tests.1.5 (2009-12-13)Use zope.container instead of zope.app.container (in tests and in the
configure.zcml).Fixed up missing dependencies and splitted regular and test dependencies.1.4 (2009-09-17)Reflect the changes ingrokcore.view1.12 whereViewandCodeViewbecome a singleViewagain. This reverts to the View situation ofgrokcore.formlib1.1.1.3 (2009-09-16)Remove the reference to the grok.View permission that is no longer in
grokcore.security 1.2Use 1.0b1 versions.cfg in Grok’s release info instead of a local
copy; a local copy for all grokcore packages is just too hard to
maintain.1.2 (2009-07-20)Adapted tests to the grokcore.view split of View and CodeView.Fixed forms to use self.template.render() directly instead of using a
removed private method from grokcore.view.Add grok.View permissions for functional tests.1.1 (2009-01-07)Have GrokForm define an empty actions attribute by default, in order
for “action-less” forms to work easily.1.0 (2008-09-25)Createdgrokcore.formlibin July 2008 by factoringzope.formlib-based components, grokkers and directives out of
Grok.