diff --git a/ROADMAP.md b/ROADMAP.md index 3a72aec..5e275b0 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -17,5 +17,7 @@ * Рефакторинг `catalog_company` и `catalog_company_detail` (`/catalog/company`): raw SQL → ORM для получения списка компаний и их наборов, вынесены вспомогательные функции (`_get_company_statistics`, `_get_company_sets_detail`, `_format_company_for_template`, `_format_set_for_template`, `_clean_text_field`, `_lowercase_first_char`), упрощена логика форматирования данных, добавлены подробные комментарии и docstring для каждой функции, использованы `select_related` и `annotate` для оптимизации запросов, добавлена защита от `Http404` при неправильных slugs. Улучшены SEO-атрибуты, и добавлена разметка shema.org. * Рефакторирнг главной страницы каталога (`/catalog/`): Улучшены SEO-атрибуты, и добавлена разметка shema.org. * Рефакторинг страницы цен одного окна: введён новый канонический SEO-роут внутри `/catalog/standard_opening/`, старый URL сохранён как legacy и переведён на постоянный 301-редирект; в `prices.py` для ветки одного окна raw SQL заменён на ORM; в шаблонах `price_offers_for_one_window.html` и `price_offers_for_one_window_frame.html` улучшены SEO-атрибуты и добавлена JSON-LD разметка `schema.org` (`BreadcrumbList`, `Product`, `ItemList`, `Offer`) с размером окна, ценами и ключевыми характеристиками предложений; добавлены тесты `web.test_prices`. +* Рефакторинг страницы ценовых предложений: в `prices.py` для ветки ценовых предложений raw SQL заменён на ORM, добавлены комментарии и docstring, оптимизированы запросы с помощью `select_related` и `annotate`, добавлена обработка случая с отсутствующими предложениями; в шаблоне `price_offers.html` улучшены SEO-атрибуты и добавлена JSON-LD разметка `schema.org` (`BreadcrumbList`, `Product`, `ItemList`, `Offer`) с размером окна, ценами и ключевыми характеристиками предложений; добавлены тесты `web.test_prices`. Добавлены хлебные крошки в шаблон. +* Замена рутинга для ценовых предложений: старый URL `(?P/)/` заменен на `/price/seriaID--/appartID/addressID--` что, прредположительно поможет SEO т.к. соответвует новым хлебным крошкам. Сделал редирект со старого URL на новый внутри `prices.py` и обновил ссылки в шаблонах, где были прямые ссылки на старый URL. * * diff --git a/oknardia/oknardia/urls.py b/oknardia/oknardia/urls.py index dd1ce61..1ae4372 100644 --- a/oknardia/oknardia/urls.py +++ b/oknardia/oknardia/urls.py @@ -84,13 +84,13 @@ urlpatterns = [ prices.redirect_one_win_price_legacy), # LEGACY-URL: 301 -> КАНОНИЧЕСКИЙ ПУТЬ re_path(r'^next_price_one_flap_frame/idW(?P\d+)N(?P\d+)\S*$', prices.next_one_win_price), # ПОДГРУЖАЕМЫЙ ФРЕЙМ С ЦЕНОВЫМИ ПРЕДЛОЖЕНИЯМИ ДЛЯ ОДНОГО ПРОЕМА - # --- Ценовая выдача (НОВЫЙ РОУТИНГ) - # Новый красивый URL с префиксами seriaID, appartAD, addressID + # --- ЦЕНОВАЯ ВЫДАЧА (НОВЫЙ РОУТИНГ) + # НОВЫЙ КРАСИВЫЙ URL С ПРЕФИКСАМИ SERIAID, APPARTAD, ADDRESSID re_path(r'^price/seriaID(?P\d+)--(?P[^/]+)/appartID(?P\d+)/addressID(?P\d+)--(?P[^/]+)/?$', prices.report_price_new), - # --- Подгружаемый фрейм ценовой выдачи (оставляем старый) + # --- ПОДГРУЖАЕМЫЙ ФРЕЙМ ЦЕНОВОЙ ВЫДАЧИ (ОСТАВЛЯЕМ СТАРЫЙ) re_path(r'^next_price_frame/idA(?P\d+)MDPO(?P\d+)LON(?P\d+)' r'LAT(?P\d+\.*\d*)N(?P\d+\.*\d*)\S*[/*]$', prices.next_price_frame), - # --- Старый URL ценовой выдачи (добавим редирект) + # --- СТАРЫЙ URL ЦЕНОВОЙ ВЫДАЧИ (ДОБАВИМ РЕДИРЕКТ) re_path(r'^(?P\d+)/(?P\d+)/(?P[\s\S]*)$', prices.report_price_legacy_redirect), # СРАВНЕНИЕ ОКОННЫХ НАБОРОВ re_path(r'^compare_sets/(?P[\s\S]+|.*)$', report1.compare_offers), # дубль для старых ссылок diff --git a/oknardia/templates/seria_info/all_seria_info_pre_light_include.html b/oknardia/templates/seria_info/all_seria_info_pre_light_include.html new file mode 100644 index 0000000..b030b75 --- /dev/null +++ b/oknardia/templates/seria_info/all_seria_info_pre_light_include.html @@ -0,0 +1,38 @@ +
+ + + {% for row in TABLE_OF_WINDOWS %} + + + {% for col in row.WIN_IN_APART %} + + {% endfor %} + + + {% endfor %} + + + {% for i in WIN_OFFER_AND_MERCHANT %} + + {% endfor %} + + +
{{ row.APART_NAME|safe }} + {% if col.WIN_ID %} + + {% for I_II in col.WIN_NUM %} +   + {% endfor %} + + {% else %}—{% endif %} + + +  {{ row.NUM_OFFERS }} + +
© 2015-2026, данные: oknardia.ru + +  {{ i.WIN_OFFER }} + +
+ +
diff --git a/oknardia/web/views.py b/oknardia/web/views.py index 527846b..98238c5 100644 --- a/oknardia/web/views.py +++ b/oknardia/web/views.py @@ -123,7 +123,7 @@ def get_address(request: HttpRequest) -> HttpResponse: try: q = Building_Info.objects.get(sAddress=addr) # Если QuerySet не содержит GeoCode (такое бывает, что в Яндекс-Картах не было каких-то данных), - # то пробуем получить GeoCode повторно (вдруг, у Яндекс-Карт расширилась база адресов) + # то пробуем получить GeoCode повторно (вдруг у Яндекс-Карт расширилась база адресов) if int(q.fGeoCode_Longitude) != 0 and int(q.fGeoCode_Latitude != 0): # print("координаты не ноль") to_template.update({'LATITUDE': str(q.fGeoCode_Latitude).replace(",", "."),