{% if images.pages > 1 %}
{% set total_pages = images.pages %} {% set current_page = images.page %} {% set window_size = 7 %} {% set endpoint = request.endpoint %} {# Build a merged param dict: query args + path args #} {% set params = request.args.to_dict(flat=True) %} {% for k, v in request.view_args.items() %} {% set _ = params.update({k: v}) %} {% endfor %} {# Helper to make a page URL while preserving all other params #} {% macro page_url(p) -%} {%- set pmap = params.copy() -%} {%- set _ = pmap.update({'page': p}) -%} {{ url_for(endpoint, **pmap) }} {%- endmacro %} {# First and Prev #} {% if images.has_prev %} {% if current_page > 1 %} « First {% endif %} ← Previous {% endif %} {# Page window logic #} {% if total_pages <= window_size %} {% set start_page = 1 %} {% set end_page = total_pages %} {% elif current_page <= 4 %} {% set start_page = 1 %} {% set end_page = window_size %} {% elif current_page > total_pages - 4 %} {% set start_page = total_pages - window_size + 1 %} {% set end_page = total_pages %} {% else %} {% set start_page = current_page - 3 %} {% set end_page = current_page + 3 %} {% endif %} {# Left ellipsis #} {% if start_page > 1 %} 1 {% if start_page > 2 %} {% endif %} {% endif %} {# Page numbers #} {% for p in range(start_page, end_page + 1) %} {{ p }} {% endfor %} {# Right ellipsis #} {% if end_page < total_pages %} {% if end_page < total_pages - 1 %} {% endif %} {{ total_pages }} {% endif %} {# Next and Last #} {% if images.has_next %} Next → {% if current_page < total_pages %} Last » {% endif %} {% endif %}
{% endif %}