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