{% extends "detail_view.html" %} {% load i18n %} {% comment %} 015-read-single-record T012: renders collection_property_rows()'s rows inside one
, through the T002 component — the same branch shape concept_detail.html uses (a Python None substituted into {{ }} renders as the literal text "None", which would make property_row.html's {% if short_form %} true for every plain-value row too, so only the keys a row actually carries are passed). T028: a membership row's entries is a list, not a string, so it is bound with cotton's dynamic attribute syntax (:entries="row.entries") rather than interpolated with {{ }} — the same way django-mvp's own breadcrumbs component binds :attrs. {% endcomment %} {% block page.content %} {% comment %} 015-read-single-record T026, FR-008: the record's own identifier as an outbound link, the same treatment concept_detail.html gives a concept's. Leads the page — the first thing in page.content — rather than trailing beneath the definition list (T007's original placement). {% endcomment %}
{% for row in rows %} {% if row.entries %} {% elif row.short_form %} {% else %} {% endif %} {% endfor %}
{% comment %} 015-read-single-record T013, FR-017: distinct wording, and no empty membership row — the loop above already contributes none for a collection with no members (collection_property_rows() simply has nothing to append), so this says so explicitly rather than leaving the reader to infer it from an absence. {% endcomment %} {% if not collection_has_members %} {% trans "This collection holds no members." %} {% endif %} {% endblock page.content %}