Menu
CoddyTech

رسائل النجاح

جزء من قسم النماذج في رحلة 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 إلى تعليمها كمقروءة، لذا تظهر كل رسالة مرة واحدة.

challenge icon

التحدي

سهل

أخبر الزائر بنجاح كل عملية حفظ.

  1. في events/views.py، أضف رسالة نجاح بعد كل عملية حفظ وقبل إعادة التوجيه: في new_event Your event was added.، وفي edit_event Your changes were saved.، وفي delete_event The event was deleted.
  2. في 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})
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس النماذج

تدرّب بنفسك: Playground لـ Django