tkhurana96
tkhurana96

Reputation: 939

Django widget tweaks 'render_field' not working

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:

enter image description here

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:

enter image description here

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:

enter image description here

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

Answers (1)

Ankita Gupta
Ankita Gupta

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

Related Questions