{#- Public list of events. Three fallback slots let a feature that builds on events reshape the page without copying this template. Each one is rendered with render_template_hooks; while nobody contributes (or every callback returns an empty string) the built-in markup below renders unchanged. events.list.title the page heading in ; the site name is kept events.list.hero the whole hero events.list.content the whole content block -#} {% extends "public_base.html" %} {% block title %}{% set contributed_title = render_template_hooks("events.list.title") %}{% if contributed_title %}{{ contributed_title }}{% else %}{{ _('Events') }}{% endif %} — {{ SPLENT_APP }}{% endblock %} {% block hero %} {% set contributed_hero = render_template_hooks("events.list.hero") %} {% if contributed_hero %} {{ contributed_hero }} {% else %} {{ render_block('hero', eyebrow=_('Programme'), title=_('Events'), subtitle=_('Talks, workshops and competitions.')) }} {% endif %} {% endblock %} {% block content %} {% set contributed_content = render_template_hooks("events.list.content") %} {% if contributed_content %} {{ contributed_content }} {% else %} <div class="container section"> <div class="card-grid"> {% for e in events %} <a class="card" href="{{ url_for('events.detail', slug=e.slug) }}"> {% if e.image %}<img class="card__img" src="{{ e.image }}" alt="">{% endif %} <span class="badge">{{ _(e.kind) }}</span> <h3 class="card__title">{{ e.title }}</h3> {% if e.summary %}<p class="card__text">{{ e.summary }}</p>{% endif %} {% if e.room or e.starts_at %} <p class="card__meta">{{ e.room }}{% if e.starts_at %} · {{ e.starts_at | datetimeformat('d MMM HH:mm') }}{% endif %}</p> {% endif %} </a> {% else %} <p class="card__text">{{ _('No events yet.') }}</p> {% endfor %} </div> </div> {% endif %} {% endblock %}