Template Tags

Encode UUIDs as display IDs directly in Django templates.

Setup

Add django_display_ids to your INSTALLED_APPS:

INSTALLED_APPS = [
    # ...
    "django_display_ids",
]

Then load the template library in your templates:

{% load display_ids %}

Filter: display_id

Encode a UUID as a display ID:

{% load display_ids %}

{{ some_uuid|display_id:"inv" }}
{# Output: inv_2aUyqjCzEIiEcYMKj7TZtw #}

{# With a model's UUID field #}
{{ invoice.id|display_id:"inv" }}

{# Foreign key UUID #}
{{ order.customer_id|display_id:"cust" }}

The prefix argument is required and must be 1-16 lowercase letters.

Note

For models with DisplayIDModel, use the display_id property directly:

{{ invoice.display_id }}

The filter is for encoding raw UUIDs that don’t come from a mixin-enabled model.

Error Handling

Errors raise TemplateSyntaxError:

  • Value is not a UUID

  • Invalid prefix format (must be 1-16 lowercase letters)

None values return an empty string (not an error).

Examples

Encoding foreign key UUIDs:

{% load display_ids %}

<p>Customer: {{ order.customer_id|display_id:"cust" }}</p>
<p>Invoice: {{ payment.invoice_id|display_id:"inv" }}</p>

Building URLs with display IDs:

{% load display_ids %}

<a href="/customers/{{ customer.id|display_id:"cust" }}/">
    View Customer
</a>

Loop over UUIDs:

{% load display_ids %}

{% for uuid in related_ids %}
    <li>{{ uuid|display_id:"rel" }}</li>
{% endfor %}