📡 You're offline — showing cached content
New version available!
Quick Access
Tutorials Django Framework Django Views

Django Views

6 min read Quiz at the end
Write ListView, DetailView, CreateView, and function-based views with auth decorators.

Views (FBV and CBV)

# Function-based view
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required

def post_list(request):
    posts = Post.objects.filter(is_draft=False)
    return render(request, "blog/post_list.html", {"posts": posts})

@login_required
def post_create(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
            return redirect(post)
    else:
        form = PostForm()
    return render(request, "blog/post_form.html", {"form": form})

# Class-based view
from django.views.generic import ListView, DetailView, CreateView

class PostListView(ListView):
    model               = Post
    template_name       = "blog/post_list.html"
    context_object_name = "posts"
    paginate_by         = 10
    queryset            = Post.objects.filter(is_draft=False)

class PostDetailView(DetailView):
    model         = Post
    slug_field    = "slug"
    template_name = "blog/post_detail.html"
Topic Quiz · 2 questions

Test your understanding before moving on

1. Which Django view class renders a list of objects?
💡 ListView automatically queries Model.objects.all() and renders a list template.
2. What does @login_required do to a function-based view?
💡 @login_required redirects to settings.LOGIN_URL if user not authenticated.