mod: Улучшены SEO-атрибуты, и добавлена разметка shema.org

This commit is contained in:
2026-04-25 15:18:59 +03:00
parent c37a3ab097
commit 1660e76810
11 changed files with 565 additions and 163 deletions

View File

@@ -183,6 +183,9 @@ def catalog_profile_model(request: HttpRequest, manufacture_id: int, manufacture
"CATALOG_URL": f"{manufacture_id}-{manufacture_name}",
"CATALOG_URL2": f"{manufacture_id}-{manufacture_name}/{model_id}-{model_name}",
"PROFILE_RATING_STARS": get_rating_set_for_stars(q_pvc_by_id.fProfileRating)}
# Размер выборки для алгоритмического рейтинга: количество моделей профилей в каталоге.
# Используется в JSON-LD (ratingCount) и поясняющем тексте на странице.
to_template["PROFILE_RATING_SAMPLE_SIZE"] = PVCprofiles.objects.count()
try:
got_json = json.loads(q_pvc_by_id.sProfileDescription)
# раскрашиваем кружочки рейтинга напротив характеристик профиля
@@ -299,7 +302,8 @@ def catalog_profile_manufacture(request: HttpRequest, manufacture_id: int, manuf
if catalog_entry is None or catalog_entry.kBlogCatalog is None:
raise ObjectDoesNotExist
manufacture_description = catalog_entry.kBlogCatalog
to_template.update({'PUB_DAT': manufacture_description.dPostDataModify})
# PUB_DAT убран: на странице производителя дата меняется и от рейтинга, и от статьи,
# поэтому Date4Meta/Last4Meta удалены из шаблона — base.html использует {% now %} по умолчанию.
if PATH_FOR_IMG_BLOG in (manufacture_description.sImgForBlogSocial or ""):
to_template.update({'IMG_FOR_BLOG': manufacture_description.sImgForBlogSocial})
content = re.sub(r'<cut[\s\S]*>', '', manufacture_description.sPostContent, 0, re.IGNORECASE)

View File

@@ -235,7 +235,8 @@ def seria_nav(seria_id: int = DEFAULT_SERIA_ID_FOR_CATALOG) -> tuple[int, dict]:
"""
q_seria = list(
Seria_Info.objects.filter(id=F("kRoot_id"))
.only("id", "sName", "sSeriaDescription", "kRoot_id", "kParent_id")
# sURL2IMG нужен для OG-image в шаблоне seria_info
.only("id", "sName", "sSeriaDescription", "kRoot_id", "kParent_id", "sURL2IMG")
.order_by("sName")
)
if not q_seria:
@@ -292,8 +293,21 @@ def all_seria_nav(seria_id: int, q_seria) -> tuple[int, dict]:
"SERIA_L": pytils.translit.slugify(seria_name),
}
if seria_id_value == seria_id:
this_return.update({"THIS_SERIA_NAME": seria_name,
"THIS_SERIA_DESCRIPTION": seria_description})
# Изображение серии: используется в OG-image в шаблоне seria_info
seria_image = (
count_seria.get("sURL2IMG")
if isinstance(count_seria, dict)
else count_seria.sURL2IMG
)
this_return.update({
"THIS_SERIA_NAME": seria_name,
"THIS_SERIA_DESCRIPTION": seria_description,
# ID и slug серии нужны для canonical URL и JSON-LD в шаблоне
"THIS_SERIA_ID": seria_id_value,
"THIS_SERIA_NAME_T": pytils.translit.slugify(seria_name),
# URL изображения серии для OG-тегов (путь относительно /media/)
"THIS_SERIA_IMAGE_URL": str(seria_image) if seria_image else "",
})
seria_nav_dim.append(one_seria)
this_return.update({"SERIA_NAV_DIM": seria_nav_dim})
return seria_id, this_return