mod: изменение роутинга для страницы ценовых предложений (4)
This commit is contained in:
@@ -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<build_id>/<apart_id>)/<build_slug>` заменен на `/price/seriaID<sriea_id>--<seria_slug>/appartID<apart_id>/addressID<build_idD>--<build_slug>` что, прредположительно поможет SEO т.к. соответвует новым хлебным крошкам. Сделал редирект со старого URL на новый внутри `prices.py` и обновил ссылки в шаблонах, где были прямые ссылки на старый URL.
|
||||
*
|
||||
*
|
||||
|
||||
@@ -84,13 +84,13 @@ urlpatterns = [
|
||||
prices.redirect_one_win_price_legacy), # LEGACY-URL: 301 -> КАНОНИЧЕСКИЙ ПУТЬ
|
||||
re_path(r'^next_price_one_flap_frame/idW(?P<win_id>\d+)N(?P<frame_begin_n>\d+)\S*$',
|
||||
prices.next_one_win_price), # ПОДГРУЖАЕМЫЙ ФРЕЙМ С ЦЕНОВЫМИ ПРЕДЛОЖЕНИЯМИ ДЛЯ ОДНОГО ПРОЕМА
|
||||
# --- Ценовая выдача (НОВЫЙ РОУТИНГ)
|
||||
# Новый красивый URL с префиксами seriaID, appartAD, addressID
|
||||
# --- ЦЕНОВАЯ ВЫДАЧА (НОВЫЙ РОУТИНГ)
|
||||
# НОВЫЙ КРАСИВЫЙ URL С ПРЕФИКСАМИ SERIAID, APPARTAD, ADDRESSID
|
||||
re_path(r'^price/seriaID(?P<seria_id>\d+)--(?P<seria_slug>[^/]+)/appartID(?P<apart_id>\d+)/addressID(?P<address_id>\d+)--(?P<address_slug>[^/]+)/?$', prices.report_price_new),
|
||||
# --- Подгружаемый фрейм ценовой выдачи (оставляем старый)
|
||||
# --- ПОДГРУЖАЕМЫЙ ФРЕЙМ ЦЕНОВОЙ ВЫДАЧИ (ОСТАВЛЯЕМ СТАРЫЙ)
|
||||
re_path(r'^next_price_frame/idA(?P<apart_id>\d+)MDPO(?P<mount_dim_per_offer>\d+)LON(?P<address_longitude>\d+)'
|
||||
r'LAT(?P<address_latitude>\d+\.*\d*)N(?P<frame_begin_n>\d+\.*\d*)\S*[/*]$', prices.next_price_frame),
|
||||
# --- Старый URL ценовой выдачи (добавим редирект)
|
||||
# --- СТАРЫЙ URL ЦЕНОВОЙ ВЫДАЧИ (ДОБАВИМ РЕДИРЕКТ)
|
||||
re_path(r'^(?P<build_id>\d+)/(?P<apart_id>\d+)/(?P<slug>[\s\S]*)$', prices.report_price_legacy_redirect),
|
||||
# СРАВНЕНИЕ ОКОННЫХ НАБОРОВ
|
||||
re_path(r'^compare_sets/(?P<to_compare>[\s\S]+|.*)$', report1.compare_offers), # дубль для старых ссылок
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<div class="col-md-9 col-xs-12" style="padding:0;">
|
||||
<!--- прешаблон начало --->
|
||||
<table style="padding:2px;">
|
||||
{% for row in TABLE_OF_WINDOWS %}
|
||||
<tr class="tr2">
|
||||
<td>{{ row.APART_NAME|safe }}</td>
|
||||
{% for col in row.WIN_IN_APART %}
|
||||
<td class="cntr">
|
||||
{% if col.WIN_ID %}
|
||||
<nobr title="{{ col.WIN_Q }} × {{ col.WIN_DESCRIPTION }}: {{ col.WIN_WIDTH }}шт.: {{ col.WIN_HEIGHT }} (Ш×В, см.). Схема открывания: {{ col.WIN_FLAPCFG }}">
|
||||
{% for I_II in col.WIN_NUM %}
|
||||
<span style="background-image:url('/static/img/svg/mark{{ I_II }}.svg');"> </span>
|
||||
{% endfor %}
|
||||
</nobr>
|
||||
{% else %}—{% endif %}
|
||||
</td>
|
||||
{% endfor %}
|
||||
<td style="background:#f9f9f9;">
|
||||
<a href="#{{ row.APART_ID }}" class="badge" title="Оконных предложений для квартиры: {{ row.NUM_OFFERS }}">
|
||||
<small class="glyphicon glyphicon-tags" aria-hidden="true"></small> {{ row.NUM_OFFERS }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr class="trZ">
|
||||
<td style="font-size: xx-small;vertical-align:text-top">© 2015-2026, данные: oknardia.ru</td>
|
||||
{% for i in WIN_OFFER_AND_MERCHANT %}
|
||||
<td class="cntr" style="background:#f9f9f9;">
|
||||
<a href="/catalog/standard_opening/price-{{ i.WIN_W|floatformat:0 }}0x{{ i.WIN_H|floatformat:0 }}0mm-tip{{ i.WIN_ID }}" class="badge" title="Ценовых предложений для окна: {{ i.WIN_OFFER }}">
|
||||
<small class="glyphicon glyphicon-tags" aria-hidden="true"></small> {{ i.WIN_OFFER }}
|
||||
</a>
|
||||
</td>
|
||||
{% endfor %}
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
<!--- прешаблон конец --->
|
||||
</div>
|
||||
@@ -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(",", "."),
|
||||
|
||||
Reference in New Issue
Block a user