Using custom templates¶
c2cgeoform distinguishes two types of templates: views templates and widget templates. - Views templates are used directly by Pyramid and provide the site structure. - Widgets templates are used by Deform to render the forms.
Default views templates¶
The default c2cgeoform views templates are located in the templates
folder and use jinja2 syntax.
c2cgeoform comes with partial templates that are included in views templates of your project.
Overriding widgets templates globally¶
Deform widget templates are located in the templates/widgets
folder and
use the chameleon syntax.
At rendering time, Deform will search folders for the templates in order they
appear in Form renderer search_path
property. c2cgeoform configure it to:
default_search_paths = (
resource_filename('c2cgeoform', 'templates/widgets'),
resource_filename('deform', 'templates'))
But you can add you own widgets folder, in your package __init__.py
file
before including c2cgeoform
using:
import c2cgeoform
search_paths = (
(resource_filename(__name__, 'templates/widgets'),) +
c2cgeoform.default_search_paths
)
c2cgeoform.default_search_paths = search_paths
To overwrite globally the Deform templates or the templates coming from
c2cgeoform
(like the map widget), you just need to copy the template to your application
templates/widgets
folder.
Use a custom template for a form or a specific widget in a form¶
Both the form main template and widget templates can be changed locally for a
given model by giving a template
property to the Widget
.
base_schema = GeoFormSchemaNode(
Comment,
widget=FormWidget(template='comment'))
Note that it is possible to create a layout for the form fields without completely
overriding the form template by giving a fields_template
to the form schema.
base_schema = GeoFormSchemaNode(
Comment,
widget=FormWidget(fields_template='comment_fields'))
Here is the default one: https://github.com/camptocamp/c2cgeoform/blob/master/c2cgeoform/templates/widgets/mapping_fields.pt