Reputation: 939
I have this form rendering template in django, and render_field
is not working inside if-else
:
{% load widget_tweaks %}
{% for field in form %}
<div class="form-group">
{{ field.label_tag }}
{% if form.is_bound %}
{% if field.errors %}
{% render_field field class="form-control is-invalid" %}
{% for error in field.errors %}
<div class="invalid-feedback">
{{error}}
</div>
{% endfor %}
{% else %}
{% render_field field class="form-control is-valid" %}
{% endif %}
{% else %}
{% render_field field class="form-control" %}
{% endif %}
{% if field.help_text %}
<small class="form-text text-muted">
{{ field.help_text }}
</small>
{% endif %}
</div>
{% endfor %}
And it renders this:
But when I try a smaller version of the above code like following, then also it still doesn't work:
{% load widget_tweaks %}
{% for field in form %}
<div class="form-group">
{% if field.errors %}
{% render_field field class="form-control is-invalid" %}
{% else %}
{% render_field field class="form-control is-valid" %}
{% endif %}
{% if field.help_text %}
<small class="form-text text-muted">
{{ field.help_text }}
</small>
{% endif %}
</div>
{% endfor %}
And renders this:
But when I remove all if-else
's:
{% load widget_tweaks %}
{% for field in form %}
<div class="form-group">
{{ field.label_tag }}
{% render_field field class="form-control" %}
{% if field.help_text %}
<small class="form-text text-muted">
{{ field.help_text }}
</small>
{% endif %}
</div>
{% endfor %}
Then it renders correctly:
But I need the if-else
's to check for form errors and add error messages to form accordingly, will appreciate any help. So why is render_field
not working with if-else
? How to resolve this ? Any other ways to use widget_tweaks
to render error or any alternative of widget_tweaks
?
Upvotes: 2
Views: 6115
Reputation: 583
You can use WIDGET_ERROR_CLASS
to set error class.
{% with WIDGET_ERROR_CLASS='my_error_class' %}
{% render_field form.field1 %}
{% render_field form.field2 %}
{% render_field form.field3 %}
{% endwith %}
And then you can add form errors:
{% if field.errors %}
{% for error in field.errors %}
<div class="invalid-feedback">
{{error}}
</div>
{% endfor %}
{% endif %}
Upvotes: 2