Нам нужно добавить 3 вида в файл views.py (папка приложения blog):
- blog_index - индексная страница со всеми записями блога;
- blog_detail - детальная страница, с полным описанием записи блога;
- blog_category - страница с записями блога выбранной категории.
Для этого в файл views.py добавьте следующий код (начиная со 2 строки):
from django.shortcuts import render
from blog.forms import CommentForm
from blog.models import Post, Comment
def blog_index(request):
posts = Post.objects.all().order_by("-created_on")
context = {"posts": posts}
return render(request, "blog_index.html", context)
def blog_category(request, category):
posts = Post.objects.filter(categories__name__contains=category).order_by(
"-created_on"
)
context = {"category": category, "posts": posts}
return render(request, "blog_category.html", context)
def blog_detail(request, pk):
post = Post.objects.get(pk=pk)
comments = Comment.objects.filter(post=post)
form = CommentForm()
if request.method == "POST":
form = CommentForm(request.POST)
if form.is_valid():
comment = Comment(
author=form.cleaned_data["author"],
body=form.cleaned_data["body"],
post=post,
)
comment.save()
context = {"post": post, "comments": comments, "form": form}
return render(request, "blog_detail.html", context)
В 3 строчке нужно импортировать класс формы для добавления нового комментария. Этот класс мы создадим позже.
В 7 строчке в переменную posts мы получаем все посты, начиная с последних.
В строчке 22 мы создаем новую пустую форму и передаем ее в шаблон.
В строчках далее мы проверяем, что если на сервер пришел запрос с типом POST, то в БД нужно добавить новый комментарий.
Теперь создадим файл с классом формы blog/forms.py. Добавим в него следующее содержимое:
from django import forms
class CommentForm(forms.Form):
author = forms.CharField(
max_length=60,
widget=forms.TextInput(attrs={
"class": "form-control",
"placeholder": "Укажите ваше имя"
})
)
body = forms.CharField(widget=forms.Textarea(
attrs={
"class": "form-control",
"placeholder": "Оставьте свой комментарий!"
})
)
Осталось указать URL для всех страниц. Они должны быть следующего вида:
localhost:8000/blog - для страницы со всеми записями блога
localhost:8000/blog/1 - для страницы с отдельной записью блога
localhost:8000/blog/python - для страницы с записями блога выбранной категории.
Создадим файл urls.py в папке приложения blog. И добавим в него следующее содержимое:
from django.urls import path
from . import views
urlpatterns = [
path("", views.blog_index, name="blog_index"),
path("<int:pk>/", views.blog_detail, name="blog_detail"),
path("<category>/", views.blog_category, name="blog_category"),
]
Теперь добавим строчку в файл urls.py (папка my-portfolio\personal_portfolio) (строка 4).
urlpatterns = [
path("admin/", admin.site.urls),
path("projects/", include("projects.urls")),
path("blog/", include("blog.urls")),
]