{% macro selector(page_url, page, pages) -%} {# Show a page selector for a paginated view. page_url (Url): the URL instance referring to the page displaying the table. page (int): 0-based number of the current page. pages (int): total number of pages. #} {% if pages > 1 %}
Pages: {% if pages <= 20 %} {{ range_selector(page_url, page, pages, 0, pages) }} {% else %} {% if page != 0 %} First {% endif %} {{ range_selector(page_url, page, pages, page - 2, pages + 3) }} {% if page != pages - 1 %} Last {% endif %} {% endif %}
{% endif %} {%- endmacro %} {% macro range_selector(page_url, page, pages, start, end) -%} {# Show a page range selector from start (included) to end (excluded). #} {% for i in range([0, start]|max, [pages, end]|min) %} {% if i != page %} {{ i + 1 }} {% else %} {{ i + 1 }} {% endif %} {% endfor %} {%- endmacro %}