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

التحدي

سهل
  • بعد كل عملية حفظ في events/views.py، أضف رسالة نجاح: Your event was added. أو Your changes were saved. أو The event was deleted.
  • في base.html، اعرض الرسائل كعناصر في <ul class="messages">، فوق {% block content %}، ولكن فقط عندما توجد رسائل.

اضغط على تشغيل، وأضف فعالية، ثم أعد تحميل صفحتها.

جرّب بنفسك

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