{% extends "admin/layout.html" %} {% block content %} {# Breadcrumb #} {# Page heading #}

{{ title }}

{% if can_update %} Edit {% endif %} {% if can_delete %}
{% endif %} Back
{# Main detail panel — description list #}

{{ resource.get_label() }} Details

{% for field in fields %}
{{ field.label }}
{% if field.field_type == 'boolean' %} {% if field.value_for(instance) %} Yes {% else %} No {% endif %} {% elif field.field_type == 'badge' %} {% set val = field.value_for(instance) %} {% set colour = field.get_colour(val) %} {% if colour == 'green' %} {{ val }} {% elif colour == 'red' %} {{ val }} {% elif colour == 'yellow' %} {{ val }} {% elif colour == 'blue' %} {{ val }} {% else %} {{ val }} {% endif %} {% elif field.field_type == 'password' %} •••••••• {% elif field.field_type == 'image' %} {% set img_url = field.url_for(instance) %} {% if img_url %} {{ field.label }} {% else %} — {% endif %} {% elif field.field_type == 'richtext' %} {% set rich_val = field.value_for(instance) %} {% if rich_val %}
{{ rich_val | safe }}
{% else %} — {% endif %} {% elif field.field_type == 'markdown' %} {% set md_html = field.render_html(instance) %} {% if md_html %}
{{ md_html | safe }}
{% else %} — {% endif %} {% elif field.field_type == 'belongs_to' %} {% set fk_val = field.value_for(instance) %} {% set display_text = field.display_value(instance) %} {% if fk_val is not none and fk_val != '' %} {{ display_text or fk_val }} {% else %} — {% endif %} {% elif field.field_type == 'belongs_to_many' %} {% set rel_items = field.get_current_items(instance) %} {% if rel_items %}
{% for item_id, item_label in rel_items %} {{ item_label }} {% endfor %}
{% else %} — {% endif %} {% else %} {{ field.display_value(instance) or '—' }} {% endif %}
{% endfor %}
{# HasMany relationship panels #} {% for panel in has_many_panels %} {% set rel_panel = related_data.get(panel.attribute, {}) %} {% set rel_items = rel_panel.get('items', []) if rel_panel is mapping else rel_panel %} {% set rel_sort = rel_panel.get('sort', '') if rel_panel is mapping else '' %} {% set rel_dir = rel_panel.get('dir', 'asc') if rel_panel is mapping else 'asc' %} {% set rel_search = rel_panel.get('search', '') if rel_panel is mapping else '' %} {% set rel_slug = panel.related_resource_class.slug() %}

{{ panel.name }}

{% if rel_search %} Clear {% endif %}
{% if rel_items %}
{% for rf in panel.related_resource_class().fields() if rf._show_on_index %} {% endfor %} {% for rel_item in rel_items %} {% for rf in panel.related_resource_class().fields() if rf._show_on_index %} {% endfor %} {% endfor %}
{% if rf._sortable %} {% set next_rel_dir = 'asc' if (rel_sort == rf.attribute and rel_dir == 'desc') else 'desc' %} {{ rf.label }} {% if rel_sort == rf.attribute %} {% else %} {% endif %} {% else %} {{ rf.label }} {% endif %} View
{% if loop.first %} {{ rf.display_value(rel_item) or rel_item._attributes.get('id') }} {% else %} {{ rf.display_value(rel_item) }} {% endif %} View →
{% else %}

No related {{ panel.name | lower }} found.

{% endif %}
{% endfor %} {# Audit log / history panel — only when AuditLog mixin is active #} {% if audit_history is defined and audit_history is not none %}

History

Recent changes to this record.

{% if audit_history %}
{% for entry in audit_history %} {% endfor %}
Action User Changes When
{{ entry.action }} {{ entry.user_id or '—' }} {% set diff = entry.diff %} {% if diff %} {% for key, change in diff.items() %}
{{ key }}: {{ change.old }}{{ change.new }}
{% endfor %} {% else %} {% endif %}
{{ entry.created_at }}
{% else %}
No history entries yet.
{% endif %}
{% endif %} {% endblock %}