Django 的成功消息显示为错误消息

问题描述 投票:0回答:1

我正在开发一个 Django 项目,我正在使用 Django 的内置消息传递框架向用户显示成功和错误消息。但是,我遇到了一个问题,成功消息的显示方式使它们看起来像错误消息。错误消息显示得像成功消息

这是我的 Html 代码:

{% extends 'base.html' %}
{% load widget_tweaks %}
{% block content %}
<div class="mx-auto max-w-screen-xl px-4 py-16 sm:px-6 lg:px-8">
    <div class="mx-auto max-w-lg">
      {% if messages %}
        {% for message in messages %}
            {% if message.tags == 'success' %}
                <div class="rounded border-s-4 mb-1 border-green-500 bg-emerald-50 p-4">
                  <strong class="block font-medium text-green-800"> Successfully </strong>
                
                  <p class="mt-2 text-sm text-green-700">
                      {{ message }}
                  </p>
              </div>
            {% else%}
                <div class="rounded border-s-4 mb-1 border-red-500 bg-red-50 p-4">
                  <strong class="block font-medium text-red-800"> Something went wrong </strong>
                  <p class="mt-2 text-sm text-red-700">
                      {{ message }}
                  </p>
                </div>
            {% endif %}
        {% endfor %}
      {% endif %}

      <h1 class="text-center text-2xl font-bold text-black sm:text-3xl">Book Appointment</h1>
  
      <p class="mx-auto mt-4 max-w-md text-center text-gray-500">
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Obcaecati sunt
        dolores deleniti inventore quaerat mollitia?
      </p>
  
      <form method="post" action="" class="mb-0 mt-6 space-y-4 rounded-lg p-4 shadow-lg sm:p-6 lg:p-8">
        <p class="text-center text-lg font-medium">Appointment form</p>
        {% csrf_token %}
        <div>
            <label for="name" class="sr-only">Name</label>
  
          <div class="relative">
            <input type="text" type="text" name="name" class="w-full rounded-lg border-gray-200 p-4 pe-12 text-sm shadow-sm outline-blue-600" placeholder="Enter name">
          </div>
        </div>

        <div>
            <label for="email" class="sr-only">Email</label>
    
            <div class="relative">
              <input type="text" type="email" name="email" class="w-full rounded-lg border-gray-200 p-4 pe-12 text-sm shadow-sm outline-blue-600" placeholder="Enter email">
            </div>
        </div>
        
        <div>
            <label for="phonenumber" class="sr-only">Phone number</label>
    
            <div class="relative">
              <input type="tel" name="phone_number" class="w-full rounded-lg border-gray-200 p-4 pe-12 text-sm shadow-sm outline-blue-600" placeholder="Enter phone number" maxlength="10">
            </div>
        </div>
        <button type="submit" class="block w-full rounded-lg bg-black px-5 py-3 text-sm font-medium text-white">Book appointment</button>
    </form>
    </div>
  </div>
{% endblock %}

这是我的views.py代码

def create_appointment(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        email = request.POST.get('email')
        phone_number = request.POST.get('phone_number')
        date_str = request.session.get('date')
        time = request.session.get('time')

        date = datetime.fromisoformat(date_str)

        if Appointment.objects.filter(email=email).exists():
            messages.error(request, 'This email is already booked for an appointment.', extra_tags='error')
            return redirect('appointment')

        if Appointment.objects.filter(phone_number=phone_number).exists():
            messages.error(request, 'This Phone number is already booked for an appointment.', extra_tags='error')
            return redirect('appointment')

        booking = Appointment.objects.create(name=name, email=email, phone_number=phone_number, date=date, time=time, user=request.user)
        booking.save()

        subject = 'Appointment Confirmation'
        message = f'Thank you for the appointment \n\n Dear {booking.name},\n\nYour appointment for {booking.date.date()} at {booking.time} has been successfully booked.\n\nYour token number is: {booking.token} \n\nPhone Number: {booking.phone_number}\n\nIf you want to cancel the appointment, just call: 91XXXXXXXX \n\nThank you!'
        from_email = settings.EMAIL_HOST_USER 
        recipient_list = [booking.email]

        send_mail(subject, message, from_email, recipient_list, fail_silently=False)
        messages.success(request, 'Appointment created successfully.', extra_tags='success')
        del request.session['date']
        del request.session['time']
        return redirect('appointment')  

    return render(request, 'appointment.html' , {'time':'appointment' , 'title':'Appointment'})

点击查看图片 error

python django django-views django-forms
1个回答
0
投票

该问题可能与您在模板中处理消息标签的方式有关。在您的代码中,您正在检查消息标签是否完全等于“成功”,如果不是,您认为这是一条错误消息。此方法可能无法正常工作,因为成功消息可能附加有其他标签。您可以以不同的方式修改代码,例如:检查消息标签中是否包含“成功”,这将使您能够更好地处理成功消息,即使它们附加了其他标签。 例如:

{% if messages %}
        {% for message in messages %}
            {% if 'success' in message.tags %}
                <div class="rounded border-s-4 mb-1 border-green-500 bg-emerald-50 p-4">
                  <strong class="block font-medium text-green-800"> Successfully </strong>
                
                  <p class="mt-2 text-sm text-green-700">
                      {{ message }}
                  </p>
              </div>
            {% else %}
                <div class="rounded border-s-4 mb-1 border-red-500 bg-red-50 p-4">
                  <strong class="block font-medium text-red-800"> Something went wrong </strong>
                  <p class="mt-2 text-sm text-red-700">
                      {{ message }}
                  </p>
                </div>
            {% endif %}
        {% endfor %}
      {% endif %}
© www.soinside.com 2019 - 2024. All rights reserved.