1
resposta

Limite de páginas no paginar

No caso de muitos dados no banco, gera muitos links de páginação, como limitar a quantidade de paginadores a ser exibida ?

1 resposta

Olá Arnóbio, tudo bem com você?

Peço desculpas pela demora no retorno.

Para limitarmos o número de páginas que serão apresentadas caso a aplicação tenha múltiplas receitas salvas, será necessário realizar a modificação da lógica presente no arquivo templates/receita/index.html responsável por definir a apresentação das páginas na nossa aplicação.

Localize a tag <section class="top-catagory-area section-padding-20-0"> que contém a lógica de apresentação das páginas e substitua seu conteúdo pelo conteúdo disponível abaixo:

        <div class="container">
            {% if receitas.has_other_pages %}
                <ul class="pagination">
                    {% if receitas.has_previous %}
                    <li class="page-item">
                        <a href="?page={{ receitas.previous_page_number }}" class="page-link">&laquo;</a>
                    </li>
                    {% else %}
                    <li class="page-item disabled">
                        <a class="page-link">&laquo;</a>
                    </li>
                    {% endif %}

                    {% with start_page=receitas.number|add:'-1' %}
                        {% with end_page=receitas.number|add:'1' %}
                            {% for page_num in receitas.paginator.page_range %}
                                {% if page_num == receitas.number %}
                                    <li class="page-item active">
                                    <a class="page-link">{{ page_num }}</a>
                                    </li>
                                {% elif page_num >= start_page and page_num <= end_page %}
                                    <li class="page-item">
                                    <a href="?page={{ page_num }}" class="page-link">{{ page_num }}</a>
                                    </li>
                                {% endif %}
                            {% endfor %}
                        {% endwith %}
                    {% endwith %}

                    {% if receitas.has_next %}
                    <li class="page-item">
                        <a href="?page={{ receitas.next_page_number }}" class="page-link">&raquo;</a>
                    </li>
                    {% else %}
                    <li class="page-item disabled">
                        <a class="page-link">&raquo;</a>
                    </li>
                    {% endif %}
                </ul>

            <!-- Tag responsável por apresentar a quantidade total de receitas -->
            <p>Total de Receitas: {{receitas.paginator.count}}</p>
            {% endif %}
        </div>  

No código acima, a lista de itens é armazenada em uma variável chamada receita. Em seguida, a lista é dividida em páginas usando o Paginator do Django, onde cada página terá no máximo 3 itens.

O trecho with start_page=receitas.number|add:'-1' cria uma variável start_page que guarda o valor da página inicial do intervalo a ser exibido. Já o trecho with end_page=receitas.number|add:'1' cria uma variável end_page que guarda o valor da última página do intervalo a ser exibido.

Por fim, o trecho {% for page_num in receitas.paginator.page_range %} itera sobre todas as páginas da lista. Se a página estiver no intervalo definido pelas variáveis start_page e end_page, o link para a página é criado. Caso contrário, o link não é exibido.

GIF contendo o resultado

GIF contendo a apresentação de uma listagem de páginas em uma aplicação web

Após as mudanças aplicadas salve o arquivo templates/receita/index.html e inicie a aplicação Django e verifique o número de links de páginas exibidos. Importante: O código foi testado em conjunto com o código da aula e dependendo da configuração da sua aplicação, será necessário realizar a adição de múltiplas receitas para que seja criado mais de 3 páginas e assim exibir o resultado.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software