[Python] TemplateSyntaxError ao usar filtro default em bloco if no Django 5.1.1

Discussão em 'Python' iniciado por Stack, Outubro 6, 2024.

  1. Stack

    Stack Membro Participativo

    Estou desenvolvendo uma aplicação Django (versão 5.1.1) e estou enfrentando um erro de TemplateSyntaxError quando tento renderizar uma página com a seguinte expressão no template:

    {% if not produto_encontrado and (query|default:'' != '' or selected_categoria or selected_antiguidade or selected_raridade) %}


    O erro retornado é:

    TemplateSyntaxError: Could not parse some characters: |(query|default:''


    Já verifiquei o contexto que está sendo passado para o template, e as variáveis estão definidas corretamente no meu view. O código do view é o seguinte:

    def lista_produtos(request):
    query = request.GET.get('q', '').strip() # Garantindo que 'query' nunca seja None
    filtro_categoria = request.GET.get('categoria', '')
    filtro_antiguidade = request.GET.get('antiguidade', '')
    filtro_raridade = request.GET.get('raridade', '')

    categorias = Categoria.objects.all()
    produtos = Produto.objects.all()
    produto_encontrado = True

    if query or filtro_categoria or filtro_antiguidade or filtro_raridade:
    if query:
    produtos = produtos.filter(Q(nome__icontains=query) | Q(descricao__icontains=query) | Q(codigo__icontains=query))
    if filtro_categoria:
    produtos = produtos.filter(categoria__nome__icontains=filtro_categoria)
    if filtro_antiguidade:
    produtos = produtos.filter(antiguidade=filtro_antiguidade)
    if filtro_raridade == "True":
    produtos = produtos.filter(raridade__in=['Raro', 'Vintage', 'Exclusivo'])
    elif filtro_raridade == "False":
    produtos = produtos.filter(raridade__in=['Comum'])

    if not produtos.exists():
    produto_encontrado = False

    return render(request, 'produtos/lista_produtos.html', {
    'produtos': produtos,
    'produto_encontrado': produto_encontrado,
    'categorias': categorias,
    'query': query,
    'selected_categoria': filtro_categoria,
    'selected_antiguidade': filtro_antiguidade,
    'selected_raridade': filtro_raridade,
    })


    O erro parece ocorrer especificamente na expressão query|default:'', mesmo quando query é uma string vazia ou preenchida. Eu já tentei:

    Usar default_if_none em vez de default, mas o erro persiste. Simplificar a condicional para verificar apenas query or selected_categoria..., mas o erro continua. Alguém poderia me ajudar a entender o que pode estar causando esse problema e como corrigi-lo? Existe alguma mudança na sintaxe de templates no Django 5.1.1 que eu deveria estar ciente?

    Desde já, obrigado!

    Continue reading...

Compartilhe esta Página