From 669d2f733c19299ac091ed4256159b800cfa7bd6 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Wed, 7 Oct 2020 17:44:44 +0200 Subject: [PATCH] Add support for fieldsets to forms This makes it possible to define a fieldset which has a legend and a description, to split up a large form into multiple visual components. --- media/css/main.css | 9 +++++++++ pgweb/core/templatetags/pgfilters.py | 5 +++++ templates/base/form_contents.html | 13 +++++++++++++ 3 files changed, 27 insertions(+) diff --git a/media/css/main.css b/media/css/main.css index 2aeddd37..08f794a3 100644 --- a/media/css/main.css +++ b/media/css/main.css @@ -1262,6 +1262,15 @@ th.formfieldnamecontainer { height: 3.5em; } +fieldset.form-group { + border: 1px groove #ddd; +} +fieldset.form-group legend { + width:inherit; + padding-left: 1rem; + padding-right: 1rem; +} + /** This code is for pgarchives */ /** diff --git a/pgweb/core/templatetags/pgfilters.py b/pgweb/core/templatetags/pgfilters.py index b2670a80..213ff4d6 100644 --- a/pgweb/core/templatetags/pgfilters.py +++ b/pgweb/core/templatetags/pgfilters.py @@ -70,6 +70,11 @@ def dictlookup(value, key): return value.get(key, None) +@register.filter(name='keylookup') +def keylookup(value, key): + return value[key] + + @register.filter(name='json') def tojson(value): return json.dumps(value) diff --git a/templates/base/form_contents.html b/templates/base/form_contents.html index 99053f50..69083cf1 100644 --- a/templates/base/form_contents.html +++ b/templates/base/form_contents.html @@ -1,11 +1,24 @@ +{%load pgfilters%}
{%if not nocsrf%}{% csrf_token %}{%endif%} {%if form.errors %}
Please correct the errors below, and re-submit the form.
{%endif%} +{%if form.fieldsets%} +{%for fieldset in form.fieldsets%} +
+ {{fieldset.legend}} +{%if fieldset.description%}

{{fieldset.description}}

{%endif%} +{%for field in fieldset.fields%} + {%include "base/form_field.html" with field=form|keylookup:field %} +{%endfor%} +
+{%endfor%} +{%else%} {% for field in form %} {%include "base/form_field.html" %} {%endfor%} +{%endif%}