Messages#

Unicorn supports Django messages and they work the same as if the template was rendered server-side. When the update action is fired, a success message will be added to the request and will show up inside the component.

<!-- messages.html -->
<div>
    {% if messages %}
    <ul class="messages">
        {% for message in messages %}
        <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
        {% endfor %}
    </ul>
    {% endif %}

    <button unicorn:click="update">Update</button>

</div>
# messages.py
from django.contrib import messages
from django_unicorn.components import UnicornView

class MessagesView(UnicornView):
    def update(self):
        messages.success(self.request, "update called")

Redirecting#

When the action returns a redirect, Unicorn will defer the messages so they do not get rendered in the component (since the user will never see the re-rendered component). Once the redirect has happened messages will be available for rendering by the template as expected.

<!-- messages-when-redirecting.html -->
<div>
    <button unicorn:click="update">Update</button>
</div>
<!-- new-url.html -->

{% if messages %}

<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}
# messages_when_redirecting.py
from django.contrib import messages
from django.shortcuts import redirect
from django_unicorn.components import UnicornView

class MessagesWhenRedirectingView(UnicornView):
    def update(self):
        messages.success(self.request, "update called")

        return redirect("new-url")