Content Blocks

Form Block

Generating freely configurable form on the front-end is difficult to get right and usually has drawbacks in terms of validation of the content that is passed through. The form block in FP provides a more restrictive way of defining form by only allowing pre-configurated forms to be selected. All available forms are configurated as settings and can be selected when editing the form block.

Defining Selectable Forms

The FormBlock <fancypages.models.blocks.content.FormBlock> uses a setting named FP_FORM_BLOCK_CHOICES to specify all available forms with their respective action URLs and (optionally) a template to render the form. An example would be:

FP_FORM_BLOCK_CHOICES = {
    'contact-us': {
        'name': "Contact Us Form",
        'form': 'contact_us.forms.ContactUsForm',
        'url': 'contact-us',
        'template_name': 'contact_us/contact_us_form.html',
    }
}

The key contact-us is the unique identifier used to store the form used in a form block. This value will be stored on the block model. Each of the keys has to provide at least name, form and url in its configuration.

name
The name displayed in the form block selection.
form
Dotted path to a form class subclassing
fancypages.form.BaseBlockForm.
url
The URL used in th``action`` attribute of the form. This can
be a Django URL pattnern name that can be used in reverse
or a fully qualified URL including a valid scheme.

In addition to these mandatory options, a template_name can be specified that will be used instead of the default form template fancypages/templates/fancypages/blocks/formblock.html.