Trang khách mời
Thuộc phần Biểu mẫu trong hành trình Django của Coddy. Bài học 19 trên 20.
Người tổ chức muốn mỗi sự kiện có một trang chỉ liệt kê khách mời và một nơi để quản lý họ. Bạn đã biết mọi thứ cần thiết: URL có pk của sự kiện, một view tìm sự kiện và vòng lặp trong template duyệt qua event.rsvps.all.
Template guest_list.html đã được tạo sẵn cho bạn, nhưng danh sách vẫn trống. Danh sách khách mời thuộc về một sự kiện, vì vậy hãy lấy khách mời thông qua sự kiện, đừng lấy từ tất cả RSVP.
Thử thách
Trung bìnhThêm một trang khách mời cho mỗi sự kiện.
- Trong
events/urls.py, thêm đường dẫnevents/<int:pk>/guests/với tênguests. - Trong
events/views.py, viết view cho đường dẫn này: tìm sự kiện theopkhoặc trả về lỗi 404, rồi renderevents/guest_list.htmlcùng với sự kiện đó. - Trong
guest_list.html, thêm một<li>cho mỗi khách mời, chẳng hạnAda (ada@example.com). Lấy danh sách khách mời thông qua sự kiện. - Trong
event_detail.html, liên kếtManage guestsđến URLevents:guests.
Nhấn Manage guests: bạn sẽ thấy Ada và Grace.
Tự làm thử
from django.contrib import messages
from django.shortcuts import get_object_or_404, redirect, render
from .forms import EventForm, RSVPForm
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)
if request.method == "POST":
form = RSVPForm(request.POST, event=event)
if form.is_valid():
rsvp = form.save(commit=False)
rsvp.event = event
rsvp.save()
messages.success(request, "You're on the list!")
return redirect("events:detail", pk=event.pk)
else:
form = RSVPForm(event=event)
return render(request, "events/event_detail.html", {"event": event, "form": form})
def new_event(request):
if request.method == "POST":
form = EventForm(request.POST)
if form.is_valid():
event = form.save()
messages.success(request, "Your event was added.")
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()
messages.success(request, "Your changes were saved.")
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()
messages.success(request, "The event was deleted.")
return redirect("events:list")
return render(request, "events/delete_event.html", {"event": event})
Tất cả bài học trong Biểu mẫu
Tự luyện tập: Playground Django