fix: исправление мета-тегов, картинок, альтов под картинками и т.п.
This commit is contained in:
@@ -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,17 +21,12 @@
|
||||
{# Левая колонка: Дата и Картинка #}
|
||||
<div class="col-lg-2 align-self-start text-end mb-4">
|
||||
<p class="small align-self-end">
|
||||
<small class="bg-secondary bg-opacity-10 p-2 text-nowrap">
|
||||
{{ page.published_at|date:"d.M.Y"|lower }}
|
||||
</small>
|
||||
</p>
|
||||
<p>
|
||||
{% if post.image %}
|
||||
<img src="{{ post.image.url }}" class="w-100" alt="{{ post.title|safe }}" />
|
||||
{% else %}
|
||||
<img src="{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}" class="w-100" alt="{{ post.title|safe }}" />
|
||||
{% endif %}
|
||||
<small class="bg-secondary bg-opacity-10 p-2 text-nowrap">{{ page.published_at|date:"d.M.Y"|lower }}</small>
|
||||
</p>
|
||||
<p>{% if page.image %}
|
||||
<img src="{{ page.image.url }}" class="w-100" alt="{{ page.image|striptags|unescape|safe }}"/>
|
||||
{% else %}<img src="{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}" class="w-100" alt="{{ page.image|striptags|unescape|safe }}"/>
|
||||
{% endif %}</p>
|
||||
</div>
|
||||
|
||||
{# Правая колонка: Контент #}
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
{% 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 %}
|
||||
<div class="row">
|
||||
|
||||
{# Левая колонка: Дата и Картинка #}
|
||||
<div class="col-lg-2 align-self-start text-end mb-4">
|
||||
<p class="small align-self-end">
|
||||
@@ -21,29 +23,22 @@
|
||||
{{ post.published_at|date:"d.M.Y"|lower }}
|
||||
</small>
|
||||
</p>
|
||||
<p>
|
||||
{% if post.image %}
|
||||
<img src="{{ post.image.url }}" class="w-100" alt="{{ post.title }}" />
|
||||
{% else %}
|
||||
<img src="{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}" class="w-100" alt="{{ post.title }}" />
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>{% if post.image %}
|
||||
<img src="{{ post.image.url }}" class="w-100" alt="{{ post.title|striptags|unescape|safe }}"/>
|
||||
{% else %}<img src="{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}" class="w-100" alt="{{ post.title|striptags|unescape|safe }}"/>
|
||||
{% endif %}</p>
|
||||
|
||||
<div class="d-none d-lg-block mt-5">
|
||||
<a href="{% url 'blog:post_list' %}" class="btn btn-sm btn-outline-secondary w-100">← В блог</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{# Правая колонка: Контент #}
|
||||
<div class="col-lg-10 border-start ps-lg-4 post-page-content">
|
||||
<h1 class="display-4 mb-4">{{ post.title|safe }}</h1>
|
||||
|
||||
<h1 class="display-4 mb-4">{{ post.title }}</h1>
|
||||
|
||||
{% if post.excerpt %}
|
||||
<p class="lead bg-secondary bg-opacity-10 p-3 rounded">
|
||||
{{ post.excerpt|linebreaksbr }}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if post.excerpt %}<div class="lead bg-secondary bg-opacity-10 p-3 rounded">
|
||||
{{ post.excerpt|safe }}
|
||||
</div>{% endif %}
|
||||
|
||||
<div class="post-content mt-4">
|
||||
{{ post.content|safe }}
|
||||
@@ -54,5 +49,5 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from django import template
|
||||
from django.utils.safestring import mark_safe
|
||||
import html
|
||||
|
||||
register = template.Library()
|
||||
|
||||
@@ -43,3 +44,22 @@ def humanize_num(value):
|
||||
|
||||
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())
|
||||
|
||||
Reference in New Issue
Block a user