From 4791b9ed16199b7a89cf96a52a79f0b2078621c5 Mon Sep 17 00:00:00 2001 From: erjemin Date: Sat, 31 Jan 2026 01:48:09 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=B5=D1=82=D0=B0-?= =?UTF-8?q?=D1=82=D0=B5=D0=B3=D0=BE=D0=B2,=20=D0=BA=D0=B0=D1=80=D1=82?= =?UTF-8?q?=D0=B8=D0=BD=D0=BE=D0=BA,=20=D0=B0=D0=BB=D1=8C=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=BE=D0=B4=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8?= =?UTF-8?q?=D0=BD=D0=BA=D0=B0=D0=BC=D0=B8=20=D0=B8=20=D1=82.=D0=BF.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blog/templates/blog/page_detail.html | 51 ++++++++-------- .../blog/templates/blog/post_detail.html | 61 +++++++++---------- .../templatetags/typograph_extras.py | 22 ++++++- 3 files changed, 74 insertions(+), 60 deletions(-) diff --git a/etpgrf_site/blog/templates/blog/page_detail.html b/etpgrf_site/blog/templates/blog/page_detail.html index 94dc7ee..2a500df 100644 --- a/etpgrf_site/blog/templates/blog/page_detail.html +++ b/etpgrf_site/blog/templates/blog/page_detail.html @@ -1,14 +1,18 @@ {% extends 'typograph/base.html' %} {% load static %} +{% load typograph_extras %} -{% block title %}{{ page.seo_title|default:page.title }} — ETPGRF{% endblock %} -{% block description %}{{ page.seo_description|default:page.content|striptags|truncatechars:160 }}{% endblock %} -{% block keywords %}{{ page.seo_keywords|default:'типограф, типографика, онлайн типограф, подготовка текста для веба, html типограф, неразрывные пробелы, кавычки елочки, длинное тире, очистка текста от мусора, интернет верстка, муравьев' }} seo_keywords {% endblock %} -{% block og_title %}{{ page.seo_title|default:page.title }}{% endblock %} -{% block og_description %}{{ page.seo_description|default:page.content|striptags|truncatechars:160 }}{% endblock %} + + +{% block title %}{% if page.seo_title %}{{ page.seo_title }}{% else %}{{ page.title|striptags|unescape|safe }}{% endif %} — ETPGRF{% endblock %} +{% block description %}{% if page.seo_description %}{{ page.seo_description }}{% else %}{{ page.excerpt|striptags|unescape|safe|truncatechars:160 }}{% endif %}{% endblock %} +{% block keywords %}{% if page.seo_keywords %}{{ post.seo_keywords }}{% else %}типограф, типографика, блог типограф, онлайн типограф, подготовка текста для веба, html типограф, неразрывные пробелы, кавычки елочки, длинное тире, очистка текста от мусора, интернет верстка, муравьев, лебедев{% endif %}{% endblock %} + +{% block og_title %}{% if page.seo_title %}{{ page.seo_title }}{% else %}{{ page.title|striptags|unescape|safe }}{% endif %}{% endblock %} +{% block og_description %}{% if page.seo_description %}{{ page.seo_description }}{% else %}{{ page.excerpt|safe|striptags|unescape|truncatechars:160 }}{% endif %}{% endblock %} {% block og_image %}{% if page.image %}{{ request.scheme }}://{{ request.get_host }}{{ page.image.url }}{% else %}{{ request.scheme }}://{{ request.get_host }}{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}{% endif %}{% endblock %} -{% block twitter_title %}{{ page.seo_title|default:page.title }}{% endblock %} -{% block twitter_description %}{{ page.seo_description|default:page.content|striptags|truncatechars:160 }}{% endblock %} +{% block twitter_title %}{% if page.seo_title %}{{ page.seo_title }}{% else %}{{ page.title|striptags|unescape|safe }}{% endif %}{% endblock %} +{% block twitter_description %}{% if page.seo_description %}{{ page.seo_description }}{% else %}{{ page.excerpt|striptags|unescape|safe|truncatechars:160 }}{% endif %}{% endblock %} {% block twitter_image %}{% if page.image %}{{ request.scheme }}://{{ request.get_host }}{{ page.image.url }}{% else %}{{ request.scheme }}://{{ request.get_host }}{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}{% endif %}{% endblock %} {% block content %} @@ -17,33 +21,28 @@ {# Левая колонка: Дата и Картинка #}

- - {{ page.published_at|date:"d.M.Y"|lower }} - -

-

- {% if post.image %} - {{ post.title|safe }} - {% else %} - {{ post.title|safe }} - {% endif %} + {{ page.published_at|date:"d.M.Y"|lower }}

+

{% if page.image %} + {{ page.image|striptags|unescape|safe }} + {% else %}{{ page.image|striptags|unescape|safe }} + {% endif %}

{# Правая колонка: Контент #}
-

{{ page.title|safe }}

+

{{ page.title|safe }}

- {% if page.excerpt %} -
- {{ page.excerpt|safe }} -
- {% endif %} - -
- {{ page.content|safe }} + {% if page.excerpt %} +
+ {{ page.excerpt|safe }}
+ {% endif %} + +
+ {{ page.content|safe }} +
diff --git a/etpgrf_site/blog/templates/blog/post_detail.html b/etpgrf_site/blog/templates/blog/post_detail.html index b0fa76a..beb8fee 100644 --- a/etpgrf_site/blog/templates/blog/post_detail.html +++ b/etpgrf_site/blog/templates/blog/post_detail.html @@ -1,58 +1,53 @@ {% extends 'typograph/base.html' %} {% load static %} +{% load typograph_extras %} -{% block title %}{{ post.seo_title|default:post.title }} — ETPGRF{% endblock %} -{% block description %}{{ post.seo_description|default:post.excerpt|default:post.content|striptags|truncatechars:160 }}{% endblock %} -{% block og_title %}{{ post.seo_title|default:post.title }}{% endblock %} -{% block og_description %}{{ post.seo_description|default:post.excerpt|default:post.content|striptags|truncatechars:160 }}{% endblock %} +{% block title %}{% if post.seo_title %}{{ post.seo_title }}{% else %}{{ post.title|striptags|unescape|safe }}{% endif %} — ETPGRF{% endblock %} +{% block description %}{% if post.seo_description %}{{ post.seo_description }}{% else %}{{ post.excerpt|striptags|unescape|safe|truncatechars:160 }}{% endif %}{% endblock %} +{% block keywords %}{% if post.seo_keywords %}{{ post.seo_keywords }}{% else %}типограф, типографика, блог типограф, онлайн типограф, подготовка текста для веба, html типограф, неразрывные пробелы, кавычки елочки, длинное тире, очистка текста от мусора, интернет верстка, муравьев, лебедев{% endif %}{% endblock %} + +{% block og_title %}{% if post.seo_title %}{{ post.seo_title }}{% else %}{{ post.title|striptags|unescape|safe }}{% endif %}{% endblock %} +{% block og_description %}{% if post.seo_description %}{{ post.seo_description }}{% else %}{{ post.excerpt|striptags|unescape|safe|truncatechars:160 }}{% endif %}{% endblock %} {% block og_image %}{% if post.image %}{{ request.scheme }}://{{ request.get_host }}{{ post.image.url }}{% else %}{{ request.scheme }}://{{ request.get_host }}{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}{% endif %}{% endblock %} -{% block twitter_title %}{{ post.seo_title|default:post.title }}{% endblock %} -{% block twitter_description %}{{ post.seo_description|default:post.excerpt|default:post.content|striptags|truncatechars:160 }}{% endblock %} +{% block twitter_title %}{% if post.seo_title %}{{ post.seo_title }}{% else %}{{ post.title|striptags|unescape|safe }}{% endif %}{% endblock %} +{% block twitter_description %}{% if post.seo_description %}{{ post.seo_description }}{% else %}{{ post.excerpt|striptags|unescape|safe|truncatechars:160 }}{% endif %}{% endblock %} {% block twitter_image %}{% if post.image %}{{ request.scheme }}://{{ request.get_host }}{{ post.image.url }}{% else %}{{ request.scheme }}://{{ request.get_host }}{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}{% endif %}{% endblock %} {% block content %}
- {# Левая колонка: Дата и Картинка #}

- - {{ post.published_at|date:"d.M.Y"|lower }} - -

-

- {% if post.image %} - {{ post.title }} - {% else %} - {{ post.title }} - {% endif %} + + {{ post.published_at|date:"d.M.Y"|lower }} +

+

{% if post.image %} + {{ post.title|striptags|unescape|safe }} + {% else %}{{ post.title|striptags|unescape|safe }} + {% endif %}

- {# Правая колонка: Контент #}
+

{{ post.title|safe }}

-

{{ post.title }}

+ {% if post.excerpt %}
+ {{ post.excerpt|safe }} +
{% endif %} - {% if post.excerpt %} -

- {{ post.excerpt|linebreaksbr }} -

- {% endif %} +
+ {{ post.content|safe }} +
-
- {{ post.content|safe }} -
- - +
-
+ {% endblock %} diff --git a/etpgrf_site/typograph/templatetags/typograph_extras.py b/etpgrf_site/typograph/templatetags/typograph_extras.py index a5c2545..91d1307 100644 --- a/etpgrf_site/typograph/templatetags/typograph_extras.py +++ b/etpgrf_site/typograph/templatetags/typograph_extras.py @@ -1,5 +1,6 @@ from django import template from django.utils.safestring import mark_safe +import html register = template.Library() @@ -40,6 +41,25 @@ def humanize_num(value): formatted = formatted.replace(",", " ").replace(".", ",") return mark_safe(f"{formatted}{suffix}") - + except (ValueError, TypeError): return value + + +@register.filter(name='unescape') +def unescape_filter(value): + """ + Декодирует HTML-сущности (  -> ' ', — -> —) + и удаляет лишние пробелы и переводы строк. + Полезно для мета-тегов (title, description, og:title). + """ + if not value: + return "" + + # 1. Декодируем сущности + text = html.unescape(str(value)) + + # 2. Удаляем лишние пробелы и переводы строк + # split() без аргументов разбивает по любым пробельным символам (\n, \t, space) + # " ".join(...) собирает обратно через один пробел + return " ".join(text.split())