{# Reusable macros for templates #} {# Pagination macro Parameters: - page: Current page number - total_pages: Total number of pages - params: Dict of query parameters to preserve (e.g., {"search": "foo", "limit": 50}) #} {% macro pagination(page, total_pages, params={}) %} {% if total_pages > 1 %} {% set query_parts = [] %} {% for key, value in params.items() %} {% if value is not none and value != '' %} {% set _ = query_parts.append(key ~ '=' ~ value) %} {% endif %} {% endfor %} {% set base_query = query_parts|join('&') %} {% set query_prefix = '&' if base_query else '' %}
{% if page > 1 %} Previous {% else %} {% endif %} {% for p in range(1, total_pages + 1) %} {% if p == page %} {% elif p == 1 or p == total_pages or (p >= page - 2 and p <= page + 2) %} {{ p }} {% elif p == 2 or p == total_pages - 1 %} {% endif %} {% endfor %} {% if page < total_pages %} Next {% else %} {% endif %}
{% endif %} {% endmacro %}