from django.shortcuts import render, get_object_or_404 from django.http import HttpResponse from django.db.models.query import QuerySet from .models import Post from comments.models import Comment from comments import services as comments_services import re from re import Match def index(request): """Список постов.""" post_list = Post.objects.order_by("-pub_date")[:20] return render(request, "posts/index.html", {"posts": post_list}) def image_processing(match: Match, images: QuerySet) -> str: """Заменяет строку с шорткодом [[image:slug]] на валидный HTML тег. Из match берется slug картинки, по которому потом выбираем из images ее url. Если объекта с таким slug нет (IndexError), то заменяем шорткод картинки на пустую строку.""" sl = match.group(1) try: url = images.filter(slug=sl)[0].image.url replacement = f"
" except IndexError: replacement = "" return replacement def detail(request, post_id): """Страница с просмотром поста.""" # вынести отсюда все. Также надо обработать текст поста тут. post = get_object_or_404(Post, pk=post_id) comments = post.comment_set.all() comments_count = comments.count() _nickname = request.COOKIES.get("nickname") nickname = comments_services.decode_nickname(_nickname) if _nickname else "" images = post.image_set.all() # вывод картинок в посте, замена шаблона по регулярке post.text = re.sub( r"\[\[image\:(.+?)\]\]", lambda x: image_processing(x, images), post.text, ) return render( request, "posts/post.html", { "post": post, "comments": comments, "comments_count": comments_count, "nickname": nickname, }, )