Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Message tags do django, mensagem não está aparecendo

As mensagens não estão aparecendo, apenas os prints. Não estou conseguindo localizar onde está o erro.

Código dos _alertas (dentro de partials):

{% if messages %}
    {% for messsage in messages %}
        <div class="alert alert-{{message.tags}}" role="alert">
            {{ message }}
        </div>
    {% endfor %}
{% endif %}

Código de inclusão da partial de alerta no html de algumas páginas:

   {% include 'partials/_alertas.html' %}

Código das views dos usuários:

from django.shortcuts import get_object_or_404, redirect, render
from django.contrib.auth.models import User
from django.contrib import auth, messages
from receitas.models import Receita

def cadastro(request):
    if request.method == 'POST':
        nome = request.POST['nome']
        email = request.POST['email']
        senha = request.POST['password']
        senha2 = request.POST['password2']
        if not nome.strip():
            print('nome em branco')
            messages.error(request, 'O campo nome não pode ficar em branco')
            return redirect('cadastro')
        if not email.strip():
            print('email em branco')
            messages.error(request, 'O campo email não pode ficar em branco')
            return redirect('cadastro')
        if senha != senha2:
            messages.error(request, 'As senhas digitadas não são iguais')
            print('senhas diferentes')
            return redirect('cadastro')
        if User.objects.filter(email=email).exists():
            messages.error(request, 'Usuário já cadastrado com esse email')
            return redirect('cadastro')
        user = User.objects.create_user(
            username=nome, email=email, password=senha2)
        user.save()
        messages.success(request, 'Cadastro realizado com sucesso')
        return redirect('login')
    else:
        return render(request, 'usuarios/cadastro.html')

def login(request):
    if request.method == 'POST':
        email = request.POST['email']
        senha = request.POST['senha']
        if email == "" or senha == "":
            print('Os campos de email e senha não podem ficar em branco')
            return redirect('login')
        if User.objects.filter(email=email).exists():
            nome = User.objects.filter(email=email).values_list(
                'username', flat=True).get()
            user = auth.authenticate(request, username=nome, password=senha)
            if user is not None:
                auth.login(request, user)
                print('login realizado com sucesso')
                return redirect('dashboard')
    return render(request, 'usuarios/login.html')


def dashboard(request):
    if request.user.is_authenticated:
        id = request.user.id
        receitas = Receita.objects.order_by('-date_receita').filter(pessoa=id)

        dados = {
            'receitas': receitas
        }

        return render(request, 'usuarios/dashboard.html', dados)
    else:
        return redirect('index')


def logout(request):
    auth.logout(request)
    return redirect('index')

def cria_receita(request):
    if request.method == 'POST':
        nome_receita = request.POST['nome_receita']
        ingredientes = request.POST['ingredientes']
        modo_preparo = request.POST['modo_preparo']
        tempo_preparo = request.POST['tempo_preparo']
        rendimento = request.POST['rendimento']
        categoria = request.POST['categoria']
        foto_receita = request.FILES['foto_receita']
        user = get_object_or_404(User, pk=request.user.id)
        receita = Receita.objects.create(pessoa=user, nome_receita=nome_receita, ingredientes=ingredientes, modo_preparo=modo_preparo,
                                         tempo_preparo=tempo_preparo, rendimento=rendimento, categoria=categoria, foto_receita=foto_receita)
        receita.save()
        return redirect('dashboard')
    else:
        return render(request, 'usuarios/cria_receita.html')

Código do settings:

# Messages
from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
    messages.ERROR: 'danger',
    messages.SUCCESS: 'success',
}

Quando há algum erro, a página é recarrecaga e a mensagem não aparece. Quando não há erro o cadastro acontece normalmente, mas também sem a mensagem de sucesso. Muito obrigado!

1 resposta
solução!

Oii André, como você está?

Peço desculpas pela demora em obter um retorno.

Ao analisar seu código, percebi que isso está ocorrendo por um pequeno erro de sintaxe no trecho abaixo:

{% for messsage in messages %}

Observe que após o for há três s na palavra messsage, mas o correto são apenas dois s. Sendo assim, altere esse trecho para:

{% if messages %}
    {% for message in messages %}
    <div class="alert alert-{{message.tags}}" role="alert">
        {{ message }}
    </div>
    {% endfor %}
{% endif %}

Após isso, tente executar novamente o código e veja se obterá êxito.

Qualquer dúvida fico à disposição.

Abraços e 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