templates: add |with_template to render form with extended markup (#29355)

This commit is contained in:
Frédéric Péters 2018-12-26 15:27:02 +01:00
parent 641c7b262c
commit b938411ebe
3 changed files with 59 additions and 28 deletions

View File

@ -1,34 +1,26 @@
{% load i18n %}
{{ form.non_field_errors }}
{% if form.errors %}
<div class="errornotice">
<p>{% trans "There were errors processing your form." %}</p>
{% for error in form.non_field_errors %}
<p>{{ error }}</p>
{% endfor %}
{% for field in form %}
{% if field.is_hidden and field.errors %}
<p>
{% for error in field.errors %}
{% blocktrans with name=field.name %}(Hidden field {{name}}) {{ error }}{% endblocktrans %}
{% if not forloop.last %}<br>{% endif %}
{% endfor %}
</p>
{% endif %}
{% endfor %}
</div>
{% endif %}
{% for field in form %}
{% if field.is_hidden %}
{% if field.errors %}
<ul class="errorlist">
{% for error in field.errors %}
<li>
{% blocktrans with name=field.name %}(Hidden field {{name}}) {{ error }}{% endblocktrans %}
</li>
{% endfor %}
</ul>
{% endif %}
{{ field }}
{% endif %}
{% endfor %}
{% for field in form %}
{% if not field.is_hidden %}
<p {% if field.css_classes %}class="{{ field.css_classes }}"{% endif %}>
{{ field.label_tag }}
{% if field.errors %}
<ul class="errorlist">
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
{{ field }}
{% if field.help_text %}
<span class="helptext">{{ field.help_text }}</span>
{% endif %}
</p>
{% else %}
{% include "gadjo/widget.html" with field=field %}
{% endif %}
{% endfor %}

View File

@ -0,0 +1,33 @@
<div class="widget
{{ field.css_classes }}
{% if field.errors %}widget-with-error{% endif %}
{% if field.required %}widget-required{% else %}widget-optional{% endif %}"
id="{{field.id_for_label}}_p">
{% block widget-title %}
<div class="title">
{{ field.label_tag }}
{% if field.field.required %}<span class="required">*</span>{% endif %}
</div>
{% endblock %}
{% block widget-content %}
<div class="content">
{% block widget-error %}
{% if field.errors %}
<div class="error">
{% for error in field.errors %}
{{ error }}{% if not forloop.last %}<br>{% endif %}
{% endfor %}
</div>
{% endif %}
{% endblock %}
{% block widget-control %}
{{ field }}
{% endblock %}
{% block widget-hint %}
{% if field.help_text %}
<div class="hint">{{ field.help_text|safe }}</div>
{% endif %}
{% endblock %}
</div>
{% endblock %}
</div>

View File

@ -116,3 +116,9 @@ def querystring(parser, token):
raise TemplateSyntaxError("Malformed arguments to '%s'" % tag)
removals = [parser.compile_filter(bit) for bit in bits]
return QuerystringNode(updates, removals)
@register.filter
def with_template(form):
form_template = template.loader.get_template('gadjo/form.html')
return form_template.render({'form': form})