From 6d69cd1d416cb540080c4aff48ef46eb680905f0 Mon Sep 17 00:00:00 2001 From: erjemin Date: Mon, 15 Jun 2026 19:52:07 +0300 Subject: [PATCH] =?UTF-8?q?minor:=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=82=D0=B5=D0=BD=D1=86=D0=B8=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BE=D0=BD=D1=84=D0=BB=D0=B8=D0=BA?= =?UTF-8?q?=D1=82=20=D0=B2=20=D1=85=D0=B5=D0=BB=D0=BF=D0=B5=D1=80=D0=B5=20?= =?UTF-8?q?make=5Fslug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lpon_site/frontend/utils.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lpon_site/frontend/utils.py b/lpon_site/frontend/utils.py index 6b0daca..893a609 100644 --- a/lpon_site/frontend/utils.py +++ b/lpon_site/frontend/utils.py @@ -30,9 +30,9 @@ def safe_html_special_symbols(s: str) -> str: str: Чистый текст без HTML-разметки и спецсимволов. Example: - >>> safe_html_special_symbols('

Привет мир!

') + >> safe_html_special_symbols('

Привет мир!

') 'Привет мир!' - >>> safe_html_special_symbols('Текст с\\u00a0неразрывным и \\u202Fтонким пробелом') + >> safe_html_special_symbols('Текст с\\u00a0неразрывным и \\u202Fтонким пробелом') 'Текст с неразрывным и тонким пробелом' """ if not s: @@ -103,6 +103,9 @@ def make_slug(slug_it: str, max_length: int | None = None, slug_default: str = " max_length = max_length or SLUG_MAX_LENGTH + # Вычисляем минимальную длину fallback'а: "slug_default-xyz" + min_fallback_length = len(slug_default) + 1 + 3 # "-" и 3 hex-символа + # Очищаем текст от HTML и спецсимволов clean_text = safe_html_special_symbols(slug_it).lower() @@ -112,8 +115,10 @@ def make_slug(slug_it: str, max_length: int | None = None, slug_default: str = " # Нормализуем множественные дефисы, удаляем дефисы в начале/конце slug = re.sub(pattern=r"-+", repl="-", string=slug).strip("-") - # Обрезаем излишнее - slug = slug[:max_length] + # Обрезаем излишнее (но только если это не нарушит fallback) + # Если max_length недостаточен для slug_default, не обрезаем + if max_length >= min_fallback_length: + slug = slug[:max_length] - # Если все еще пусто — генерируем fallback + # Если все еще пусто — генерируем fallback (БЕЗ обрезания!) return slug or f"{slug_default}-{random.randint(1, 4095):03x}"