mod: Улучшены SEO-атрибуты, и добавлена разметка shema.org
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user