Um detalhe que pode ter passado despercebido é que a funcionalidade de filtro também estaria supostamente disponível para a opção de busca no projeto final, assim, eu decidi implementar de um método um pouco diferente, mas ainda assim usando o conceito de GET e a tag
, segue sugestão de código usadobuscar.html:
{% extends 'shared/base.html' %}
{% load static %}
{% block content %}
<section class="conteudo">
<section class="banner">
<img class="banner__imagem" src="{% static '/assets/imagens/Banner(2).png' %}" alt="banner Alura Space">
<h1 class="banner__titulo"> A galeria mais completa de fotos do espaço!</h1>
</section>
<section class="tags">
<p class="tags__titulo">Busque por tags:</p>
<ul class="tags__lista">
<form action="{% url 'buscar' %}" method="GET">
<input type="hidden" name="buscar" value="{{ request.GET.buscar }}">
<button class="tags__tag" type="submit" name="categoria" value="">Todos</button>
<button class="tags__tag" type="submit" name="categoria" value="NEBULOSA">Nebulosa</button>
<button class="tags__tag" type="submit" name="categoria" value="ESTRELA">Estrela</button>
<button class="tags__tag" type="submit" name="categoria" value="GALÁXIA">Galáxia</button>
<button class="tags__tag" type="submit" name="categoria" value="PLANETA">Planeta</button>
</form>
</ul>
</section>
<!-- Todo o resto do código -->
views.py
@login_required(login_url='login')
def buscar(request):
fotografias = Fotografia.objects.order_by("data_fotografia").filter(publicada=True)
if "buscar" in request.GET:
nome_a_buscar = request.GET['buscar']
if nome_a_buscar:
fotografias = fotografias.filter(nome__icontains=nome_a_buscar)
if "categoria" in request.GET:
categoria = request.GET['categoria']
if categoria:
fotografias = fotografias.filter(categoria__icontains=categoria)
return render(request, "galeria/buscar.html", {"cards": fotografias})