Some useful sources to work with pagination and list in TWIG templates
{% if admin.datagrid.pager.haveToPaginate() %}
<div class="pagination">
<span class="pagination-infos">
{{ admin.datagrid.pager.page }} / {{ admin.datagrid.pager.lastpage }}
-
{% transchoice admin.datagrid.pager.nbresults with {'%count%': admin.datagrid.pager.nbresults} from 'SonataAdminBundle' %}list_results_count{% endtranschoice %}
</span>
<div class="pagination-config">
{% if not app.request.isXmlHttpRequest %}
<label class="control-label" for="{{ admin.uniqid }}_per_page">{% trans from 'SonataAdminBundle' %}label_per_page{% endtrans %}</label>
<select class="per-page small" id="{{ admin.uniqid }}_per_page" style="width: auto; height: auto">
{% for per_page in admin.getperpageoptions %}
<option {% if per_page == admin.datagrid.pager.maxperpage %}selected="selected"{% endif %} value="{{ admin.generateUrl('list', {'filter': admin.datagrid.values | merge({'_per_page': per_page})}) }}">
{{ per_page }}
</option>
{% endfor %}
</select>
{% endif %}
</div>
<ul>
{# first/prev #}
{% if admin.datagrid.pager.page != 1 %}
<li class="pagination-first"><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, 1)) }}" title="{{ 'link_first_pager'|trans({}, 'SonataAdminBundle') }}">«</a></li>
{% endif %}
{% if admin.datagrid.pager.page != admin.datagrid.pager.previouspage %}
<li class="pagination-prev"><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, admin.datagrid.pager.previouspage)) }}" title="{{ 'link_previous_pager'|trans({}, 'SonataAdminBundle') }}">‹</a></li>
{% endif %}
{# Set the number of pages to display in the pager #}
{% for page in admin.datagrid.pager.getLinks() %}
{% if page == admin.datagrid.pager.page %}
<li class="pagination-current"><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, page)) }}">{{ page }}</a></li>
{% else %}
<li><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, page)) }}">{{ page }}</a></li>
{% endif %}
{% endfor %}
{# next/last #}
{% if admin.datagrid.pager.page != admin.datagrid.pager.nextpage %}
<li class="pagination-next"><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, admin.datagrid.pager.nextpage)) }}" title="{{ 'link_next_pager'|trans({}, 'SonataAdminBundle') }}">›</a></li>
{% endif %}
{% if admin.datagrid.pager.page != admin.datagrid.pager.lastpage %}
<li class="pagination-last"><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, admin.datagrid.pager.lastpage)) }}" title="{{ 'link_last_pager'|trans({}, 'SonataAdminBundle') }}">»</a></li>
{% endif %}
</ul>
</div>
{% endif %}