Browse Source

Вынес обработку картинок из лямбды в функцию

master
Дмитрий 3 years ago
parent
commit
143021b5b8
  1. 19
      blog/posts/views.py

19
blog/posts/views.py

@ -1,12 +1,13 @@
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse from django.http import HttpResponse
from django.db.models.query import QuerySet
from .models import Post from .models import Post
from comments.models import Comment from comments.models import Comment
from comments import services as comments_services from comments import services as comments_services
import re import re
from re import Match
def index(request): def index(request):
@ -15,6 +16,20 @@ def index(request):
return render(request, "posts/index.html", {"posts": post_list}) return render(request, "posts/index.html", {"posts": post_list})
def image_processing(match: Match, images: QuerySet) -> str:
"""Заменяет строку с шорткодом [[image:slug]] на валидный HTML <img/> тег.
Из match берется slug картинки, по которому потом выбираем из
images ее url. Если объекта с таким slug нет (IndexError), то заменяем шорткод
картинки на пустую строку."""
sl = match.group(1)
try:
url = images.filter(slug=sl)[0].image.url
replacement = f"<figure class='image'><img src='{url}'/></figure>"
except IndexError:
replacement = ""
return replacement
def detail(request, post_id): def detail(request, post_id):
"""Страница с просмотром поста.""" """Страница с просмотром поста."""
# вынести отсюда все. Также надо обработать текст поста тут. # вынести отсюда все. Также надо обработать текст поста тут.
@ -30,7 +45,7 @@ def detail(request, post_id):
# вывод картинок в посте, замена шаблона по регулярке # вывод картинок в посте, замена шаблона по регулярке
post.text = re.sub( post.text = re.sub(
r"\[\[image\:(.+?)\]\]", r"\[\[image\:(.+?)\]\]",
lambda x: f"<img src='{images.filter(slug=x.group(1))[0].image.url}'/>", lambda x: image_processing(x, images),
post.text, post.text,
) )

Loading…
Cancel
Save