|
|
@@ -1,30 +1,32 @@
|
|
|
{% load helpers %}
|
|
|
|
|
|
-<div id="django-messages" class="toast-container position-fixed bottom-0 end-0 m-3">
|
|
|
+<div id="django-messages" class="toast-container">
|
|
|
{# Django Messages #}
|
|
|
|
|
|
- {% if messages %}
|
|
|
- {% for message in messages %}
|
|
|
- {% with message.level_tag|status_from_tag as status %}
|
|
|
- {% with status|icon_from_status as icon %}
|
|
|
- <div class="django-message toast align-items-center border-0 bg-{{ status }}" role="alert" aria-live="assertive" aria-atomic="true" data-bs-delay="10000">
|
|
|
- <div class="d-flex">
|
|
|
- <div class="toast-body">
|
|
|
- <i class="mdi mdi-{{ icon }} me-1"></i>
|
|
|
- {{ message }}
|
|
|
- </div>
|
|
|
+ {# Form Field Errors #}
|
|
|
+ {% if form and form.errors %}
|
|
|
+ {% for field in form %}
|
|
|
+ {% for error in field.errors %}
|
|
|
+ <div class="django-message toast align-items-center border-0 bg-danger" data-django-type="field-error" role="alert" aria-live="assertive" aria-atomic="true" data-bs-delay="60000">
|
|
|
+ <div class="toast-header bg-danger">
|
|
|
+ <strong class="me-auto">
|
|
|
+ <i class="mdi mdi-{{ "danger"|icon_from_status }} me-1"></i>
|
|
|
+ {{ field.label }}
|
|
|
+ </strong>
|
|
|
<button type="button" class="btn-close me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
|
|
|
</div>
|
|
|
+ <div class="toast-body">
|
|
|
+ {{ error|escape }}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- {% endwith %}
|
|
|
- {% endwith %}
|
|
|
+ {% endfor %}
|
|
|
{% endfor %}
|
|
|
+ {% endif %}
|
|
|
|
|
|
- {% elif form and form.non_field_errors %}
|
|
|
- {# Non-Field Form Errors #}
|
|
|
-
|
|
|
+ {# Non-Field Form Errors #}
|
|
|
+ {% if form and form.non_field_errors %}
|
|
|
{% for error in form.non_field_errors.get_json_data %}
|
|
|
- <div class="django-message toast align-items-center border-0 bg-danger" role="alert" aria-live="assertive" aria-atomic="true" data-bs-delay="10000">
|
|
|
+ <div class="django-message toast align-items-center border-0 bg-danger" data-django-type="non-field-error" role="alert" aria-live="assertive" aria-atomic="true" data-bs-delay="10000">
|
|
|
<div class="d-flex">
|
|
|
<div class="toast-body">
|
|
|
<i class="mdi mdi-{{ "danger"|icon_from_status }} me-1"></i>
|
|
|
@@ -34,26 +36,25 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
{% endfor %}
|
|
|
-
|
|
|
- {% elif form and form.errors %}
|
|
|
- {# Form Field Errors #}
|
|
|
+ {% endif %}
|
|
|
|
|
|
- {% for field in form %}
|
|
|
- {% for error in field.errors %}
|
|
|
- <div class="django-message toast align-items-center border-0 bg-danger" role="alert" aria-live="assertive" aria-atomic="true" data-bs-delay="60000">
|
|
|
- <div class="toast-header bg-danger">
|
|
|
- <strong class="me-auto">
|
|
|
- <i class="mdi mdi-{{ "danger"|icon_from_status }} me-1"></i>
|
|
|
- {{ field.label }}
|
|
|
- </strong>
|
|
|
+ {# Django Messages #}
|
|
|
+ {% if messages %}
|
|
|
+ {% for message in messages %}
|
|
|
+ {% with message.level_tag|status_from_tag as status %}
|
|
|
+ {% with status|icon_from_status as icon %}
|
|
|
+ <div class="django-message toast align-items-center border-0 bg-{{ status }}" data-django-type="message" role="alert" aria-live="assertive" aria-atomic="true" data-bs-delay="10000">
|
|
|
+ <div class="d-flex">
|
|
|
+ <div class="toast-body">
|
|
|
+ <i class="mdi mdi-{{ icon }} me-1"></i>
|
|
|
+ {{ message }}
|
|
|
+ </div>
|
|
|
<button type="button" class="btn-close me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
|
|
|
</div>
|
|
|
- <div class="toast-body">
|
|
|
- {{ error|escape }}
|
|
|
- </div>
|
|
|
</div>
|
|
|
- {% endfor %}
|
|
|
+ {% endwith %}
|
|
|
+ {% endwith %}
|
|
|
{% endfor %}
|
|
|
-
|
|
|
{% endif %}
|
|
|
+
|
|
|
</div>
|