{% comment %} Both cases are stated, in the same words the list of vocabularies uses (FR-003).
Leaving the imported case to the absence of "Held here" would make a reader infer
provenance from the identifier's domain, which is the inference FR-003 removes. {% endcomment %}
{% if vocabulary.static_uri %}
{% trans "Imported" %}
{% else %}
{% trans "Held here" %}
{% endif %}
{% comment %} The identifier is an outbound link (T003 reverses #140's D6): nothing is marked
safe and nothing is interpolated into any attribute besides href {% endcomment %}
{% if collections %}
{% comment %} T019, decisions.md D5/D7: named, separate from the concept list, an ordered
one distinguishable from an unordered one. An ordinary loop, not django-mvp's
list component — it declares a row-template attribute it never reads and
renders whatever row template is already in the surrounding context, so
pointing it at a collection row would silently render concept rows instead
(plan.md item 5). A vocabulary holding none renders no section at all — this
whole block is absent, not present and empty. 015-read-single-record T020:
each entry now links to its own page — this page keeps `vocabulary` in
context throughout (unlike concept_list_item.html, this loop is not rendered
through render_list_item's isolated context), so the href is built from
`vocabulary.slug` and `collection.slug` alone, no query beyond the
already-loaded collections queryset. T027: composes django-mvp's own
with hover=True, the same bare-anchor defect concept_detail.html's own
membership section had, fixed with the same component. {% endcomment %}
{% trans "Collections" %}
{% for collection in collections %}
{% if collection.ordered %}{% trans "Ordered" %}{% endif %}
{% endfor %}
{% endif %}
{% if search_term %}
{% comment %} The way back to the whole vocabulary (T015, FR-014): rendered here, in this
package's own template, never as markup inside the empty-state heading or
message — django-mvp's empty-state component autoescapes those strings with no
slot, so an anchor there would show as literal text and marking it safe would
emit the search term unescaped. {% endcomment %}