رسائل النجاح
جزء من قسم النماذج في رحلة Django على Coddy. الدرس 15 من 20.
بعد الحفظ، يصل الزائر إلى صفحة الفعالية، لكن لا شيء يشير إلى نجاح الحفظ. لا يستطيع العرض تمرير متغير إلى تلك الصفحة، لأن عرضًا آخر يرسمها في الطلب التالي.
ينقل إطار عمل الرسائل في Django ملاحظة عبر إعادة التوجيه. يضيفها العرض قبل إعادة التوجيه؛ ويحتفظ بها Django لذلك الزائر، ثم يمررها إلى الصفحة التي تُرسم بعد ذلك. مثال لمدونة تحفظ تعليقًا:
from django.contrib import messages
comment.save()
messages.success(request, "Thanks, your comment is posted.")
return redirect("blog:post", pk=post.pk)يحصل كل قالب على متغير messages، لذا يمكن للقالب الأساسي عرض الرسائل في كل صفحة:
{% for message in messages %}
<p class="note">{{ message }}</p>
{% endfor %}يؤدي التكرار عبر messages إلى تعليمها كمقروءة، لذا تظهر كل رسالة مرة واحدة.
التحدي
سهلأخبر الزائر بنجاح كل عملية حفظ.
- في
events/views.py، أضف رسالة نجاح بعد كل عملية حفظ وقبل إعادة التوجيه: فيnew_eventYour event was added.، وفيedit_eventYour changes were saved.، وفيdelete_eventThe event was deleted. - في
base.html، اعرض كل رسالة كعنصر<li>داخل<ul class="messages">، ولا تعرض القائمة إلا عند وجود رسائل.
أضف فعالية: تظهر Your event was added. في الأعلى، وتؤدي إعادة تحميل الصفحة إلى مسحها.
جرّب بنفسك
from django.shortcuts import get_object_or_404, redirect, render
from .forms import EventForm
from .models import Event
def event_list(request):
q = request.GET.get("q", "")
events = Event.objects.all()
if q:
events = events.filter(title__icontains=q)
return render(request, "events/event_list.html", {"events": events, "q": q})
def event_detail(request, pk):
event = get_object_or_404(Event, pk=pk)
return render(request, "events/event_detail.html", {"event": event})
def new_event(request):
if request.method == "POST":
form = EventForm(request.POST)
if form.is_valid():
event = form.save()
return redirect("events:detail", pk=event.pk)
else:
form = EventForm()
return render(request, "events/new_event.html", {"form": form})
def edit_event(request, pk):
event = get_object_or_404(Event, pk=pk)
if request.method == "POST":
form = EventForm(request.POST, instance=event)
if form.is_valid():
form.save()
return redirect("events:detail", pk=event.pk)
else:
form = EventForm(instance=event)
return render(request, "events/edit_event.html", {"form": form, "event": event})
def delete_event(request, pk):
event = get_object_or_404(Event, pk=pk)
if request.method == "POST":
event.delete()
return redirect("events:list")
return render(request, "events/delete_event.html", {"event": event})
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس النماذج
تدرّب بنفسك: Playground لـ Django