Django Lesson 4: Views & URLs

🐍 Django CourseLesson 4 of 10 · 40% complete

Views are Python functions (or classes) that handle requests and return responses. URLs map URL patterns to view functions.

Function-Based Views

# posts/views.py
from django.shortcuts import render, get_object_or_404
from django.http import JsonResponse
from .models import Post

def post_list(request):
    posts = Post.objects.filter(status="published")
    return render(request, "posts/list.html", {"posts": posts})

def post_detail(request, slug):
    post = get_object_or_404(Post, slug=slug, status="published")
    return render(request, "posts/detail.html", {"post": post})

def api_posts(request):
    posts = Post.objects.values("id", "title", "created_at")
    return JsonResponse(list(posts), safe=False)

URL Routing

# posts/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path("", views.post_list, name="post-list"),
    path("<slug:slug>/", views.post_detail, name="post-detail"),
    path("api/posts/", views.api_posts),
]

# myblog/urls.py (root)
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path("admin/", admin.site.urls),
    path("posts/", include("posts.urls")),
]

🏋️ Practice Task

Create views for your task manager: task_list (all tasks, filter by ?project=id), task_detail (single task by id), api_tasks (return JSON). Wire up URLs. Test in browser: /tasks/, /tasks/1/, /tasks/api/.

💡 Hint: Use request.GET.get(“project”) to check if filter is present. tasks = Task.objects.filter(project_id=proj_id) if proj_id else Task.objects.all()

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *