1
resposta

[Sugestão] Aproveitar o index (DRY, não cria outra tela)

Olá pessoas. Compartilho minha sugestão a fim de evitar repetição de código pra aplicar o conceito de DRY, como já questionado em outro tópico. Não sei se mais a frente terá alguma funcionalidade a mais para a página de busca (espero que não kkkk).

Pra isso não tive que criar outra view, template, nem url, uma vez que aproveito o index já disponível.

Na minha views.py, no próprio index, fiz a verificação se existe o parâmetro de pesquisa na url. Se existir, aplica o filtro de search. Se não, traz tudo, como já funcionava antes. Apliquei, também, outra ideia que comentaram no fórum, de não trazer todos os registros do BD para, só depois, filtrar. Dessa maneira, já traz do BD apenas os arquivos que correspondem à busca.

if 'search' in request.GET:
        photographs = Photograph.objects.filter(title__icontains=request.GET['search'], active=True).order_by('-date_upload', 'title')
    else:
        photographs = Photograph.objects.order_by('-date_upload', 'title').filter(active=True)

por fim, no _ _header.html, coloquei o value da busca pra quando estiver exibindo resultado da busca.

 <form action="{% url 'home' %}" method=" get">
                <input class="busca__input text_search" type="text" name="search" placeholder="O que você procura?"
                    value="{{ request.GET.search }}">
                <button type="submit" class="null_style__button">
                    <img class="busca__icone" src="{% static '/assets/ícones/1x/search.png' %}" alt="ícone de search">
                </button>
</form>

Espero não ter esquecido de nenhum detalhe, mas tá aí. Acredito que possa contribuir pra quem queira aproveitar a página de index pra exibir o filtro da busca.

1 resposta

Oi, Maik! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura e ajudar a trazer ainda mais aprendizado para os outros estudantes!

Gostei bastante da forma como você aplicou o conceito de DRY aproveitando o index para centralizar a lógica da busca. Isso torna o projeto mais organizado e evita repetições desnecessárias.

Uma dica interessante para o futuro é usar o método get() do dicionário para acessar parâmetros de forma mais limpa. Veja este exemplo:


search = request.GET.get('search')
if search:
    photographs = Photograph.objects.filter(title__icontains=search, active=True).order_by('-date_upload', 'title')
else:
    photographs = Photograph.objects.filter(active=True).order_by('-date_upload', 'title')

Esse código verifica se existe um valor em search e já aplica o filtro, deixando a leitura mais clara.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!