{% load i18n %} {% comment %} Generic table-listing widget (see utilities/listing.py). CSS/JS are inlined on purpose: static is served from a CloudFront backend, so separate assets need collectstatic + CDN invalidation. Inlining keeps the widget self-contained and reusable across the codebase. {% endcomment %}
{% if widget.has_search or widget.filters %}
{% if widget.has_search %} {% endif %} {% for f in widget.filters %} {% endfor %}
{% endif %}
{% if not widget.readonly %} {% endif %} {% for col in widget.columns %}{% endfor %} {% for row in widget.rows %} {% if not widget.readonly %} {% endif %} {% for cell in row.cells %} {% endfor %} {% empty %} {% endfor %}
{{ col.header }}
{% if cell.badge %}{{ cell.display }}{% else %}{{ cell.display|default:"—" }}{% endif %}
{{ widget.empty_label }}