Partial Updates#

Normally Unicorn will send the entire component’s rendered HTML on every action to make sure that any changes to the context is reflected on the page. However, to reduce latency and minimize the amount of data that has to be sent over the network, Unicorn can only update a portion of the page by utilizing the unicorn:partial attribute.

Note

By default, unicorn:partial will look in the current component’s template for an id or unicorn:key. If an element can’t be found with the specified target, the entire component will be morphed like usual.

# partial_update.py
from django_unicorn.components import UnicornView

class PartialUpdateView(UnicornView):
    checked = False
<!-- partial-update.html -->
<div>
  <span id="checked-id">{{ checked }}</span>
  <button unicorn:click="$toggle('checked')" unicorn:partial="checked-id">
    Toggle checked
  </button>
</div>

Target by id#

To only target an element id add the id modifier to unicorn:partial.

<!-- partial-update-id.html -->
<div>
  <span id="checked-id">{{ checked }}</span>
  <button unicorn:click="$toggle('checked')" unicorn:partial.id="checked-id">
    Toggle checked
  </button>
</div>

Target by key#

To only target an element unicorn:key add the key modifier to unicorn:partial.

<!-- partial-update-key.html -->
<div>
  <span unicorn:key="checked-key">{{ checked }}</span>
  <button unicorn:click="$toggle('checked')" unicorn:partial.key="checked-key">
    Toggle checked
  </button>
</div>

Note

Multiple partials can be targetted by adding multiple attributes to the element.

<button unicorn:click="$toggle('checked')" unicorn:partial.key="checked-key" unicorn:partial.id="checked-id">