Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
# blog/views.py — function-based views from django.shortcuts import render, get_object_or_404, redirect from django.contrib.auth.decorators import login_required from django.views.decorators.http import require_POST from django.contrib import messages from .models import Post from .forms import CommentForm def post_list(request): """Display a paginated list of published posts.""" from django.core.paginator import Paginator queryset = Post.published.select_related('author').order_by('-published_at') paginator = Paginator(queryset, 10) page_number = request.GET.get('page') page_obj = paginator.get_page(page_number) return render(request, 'blog/post_list.html', {'page_obj': page_obj}) def post_detail(request, pk): """Display a single post and its comment form.""" post = get_object_or_404(Post.published, pk=pk) form = CommentForm() return render(request, 'blog/post_detail.html', {'post': post, 'form': form}) @login_required def post_create(request): """Create a new post (authenticated users only).""" from .forms import PostForm if request.method == 'POST': form = PostForm(request.POST) if form.is_valid(): post = form.save(commit=False) post.author = request.user post.save() messages.success(request, 'Post created successfully.') return redirect('post-detail', pk=post.pk) else: form = PostForm() return render(request, 'blog/post_form.html', {'form': form}) @login_required @require_POST def post_delete(request, pk): """Delete a post (POST only, owner only).""" post = get_object_or_404(Post, pk=pk, author=request.user) post.delete() messages.success(request, 'Post deleted.') return redirect('post-list')
Result
Open