
{% macro this_url_for(endpoint, url_args) %}
    {% with kw = url_args.copy() %}
        {% do kw.update(kwargs) %}
        {{ url_for(endpoint, **kw) }}
    {% endwith %}
{% endmacro %}

{% macro render_pagination(
    pagination,
    endpoint=None,
    prev=('&laquo;')|safe,
    next=('&raquo;')|safe,
    size=None,
    ellipses='…',
    args={},
    fragment='',
    align=''
)%}
    {% if fragment != '' and not fragment.startswith('#') %}{% set fragment = '#' + fragment %}{% endif %}
    {% with url_args = {} %}
        {% do 
            url_args.update(request.view_args if not endpoint else {}), 
            url_args.update(request.args if not endpoint else {}), 
            url_args.update(args) 
        %}        
       {% with endpoint = endpoint or request.endpoint %}
       <nav aria-label="Page navigation">
        <ul class="pagination {% if size %} pagination-{{ size }}{% endif %} {% if align == 'center' %}justify-content-center{% elif align == 'right' %}justify-content-end{% endif %}"{{ kwargs|xmlattr }}>
        
        {% if prev != None %}
        <li class="page-item {% if not pagination.has_prev %}disabled{% endif %}">
            <a class="page-link" href="{{ this_url_for(endpoint, url_args, page=pagination.prev_num) if pagination.has_prev else '#' }}{{ fragment }}">{{ prev }}</a>
        </li>
        {% endif %}

        {% for page in pagination.iter_pages() %}
            {% if page %}
                {% if page != pagination.page %}
                <li class="page-item">
                    <a class="page-link" href="{{ this_url_for(endpoint, url_args, page=page) }}{{ fragment }}">{{ page }}</a>
                </li>
                {% else %}
                <li class="page-item active">
                    <a class="page-link" href="#">{{ page }} <span class="sr-only">(current)</span></a>
                </li>
                {% endif %}
            {% elif ellipses != None %}
                <li class="page-item disabled"><a class="page-link" href="#">{{ ellipses }}</a></li>
            {% endif %}
        {% endfor %}

        {% if next != None %}
        <li class="page-item {% if not pagination.has_next %}disabled{% endif %}">
            <a class="page-link" href="{{ this_url_for(endpoint, url_args, page=pagination.next_num) if pagination.has_next else '#' }}{{ fragment }}">{{ next }}</a>
        </li>
        {% endif %}
        
         </ul>
        </nav>
        {% endwith %}
    {% endwith %}
{% endmacro %}
