Django
Django Views
Function-based views and request handling
Django Views — TaskBoard dashboard
Where we are: Project exists; next we list tasks on a dashboard view.
Function-based view (FBV)
# tasks/views.py
from django.shortcuts import render
from .models import Task
def task_list(request):
tasks = Task.objects.filter(is_done=False).select_related("project")
return render(request, "tasks/task_list.html", {"tasks": tasks})
get_object_or_404 (production habit)
from django.shortcuts import get_object_or_404
def task_detail(request, pk):
task = get_object_or_404(Task, pk=pk)
return render(request, "tasks/task_detail.html", {"task": task})
POST handling and messages
from django.contrib import messages
from django.shortcuts import redirect
def task_toggle_done(request, pk):
if request.method != "POST":
return redirect("tasks:task-list")
task = get_object_or_404(Task, pk=pk)
task.is_done = not task.is_done
task.save(update_fields=["is_done"])
messages.success(request, f"Updated: {task.title}")
return redirect("tasks:task-list")
Avoid: Task.objects.get(pk=pk) in user-facing views—uncaught DoesNotExist becomes a 500 error. Use get_object_or_404.