diff --git a/oknardia/oknardia/urls.py b/oknardia/oknardia/urls.py index 1ba7cdf..d50010b 100644 --- a/oknardia/oknardia/urls.py +++ b/oknardia/oknardia/urls.py @@ -53,6 +53,7 @@ urlpatterns = [ re_path(r'^stat/rating/profiles_rank[/*]$', report2.profiles_rating), # КАТАЛОГ re_path(r'^catalog[/*]$', catalog.catalog_root), + re_path(r'^catalog/profile[/*]$', catalog.catalog_profile), ] diff --git a/oknardia/templates/catalog/catalog_of_profiles.html b/oknardia/templates/catalog/catalog_of_profiles.html new file mode 100755 index 0000000..3c44a30 --- /dev/null +++ b/oknardia/templates/catalog/catalog_of_profiles.html @@ -0,0 +1,64 @@ +{% extends "base.html" %} +{% load static %} + +{% block Title %} Каталог оконных профилей{% endblock %} + +{% block Add_Body_Attribute %} style="padding-top:70px;"{% endblock %} + +{% block Description %}Каталог оконных профилей{% endblock %} + +{% block Keywords %}каталог оконных профилей, каталог производителей оконных профилей, каталог профилей, оконные профили, oknardia, окнардия {{ META_KEYWORDS|default:"" }} {% endblock %} + +{% block Date4Meta %}{{ CATALOG_LAST_UPDATE|date:"c" }}{% endblock %} + +{% block Last4Meta %}{{ CATALOG_LAST_UPDATE|date:"c" }}{% endblock %} + +{% block Author4Meta %}: Каталог{% endblock %} + +{% block CopyrightAuthor4Meta %}: Каталог{% endblock %} + +{% block Main_Content %} +
+ {# #}
+
+ +

Каталог оконных профилей

+

Узнать о производителях, познакомиться с детальными характеристики и описаниями оконных профилей можно кликнув по ссылкам. Сейчас в каталоге «Окнардии» представлено {{ CATALOG_MANUFACT_NUM_W }} профилей ({{ CATALOG_PROFILE_NUM }} в базе). Последнее обновление {{ CATALOG_LAST_UPDATE_W }}.

+
+
{# #} +
+
+
  • производитель
    • название или марка профиля
+
  • производитель
    • название или марка профиля
+
+
+ +
+ +
+ {# --- Баннер: НАЧАЛО --- #} +

{% include "ad/bannet-wide.html" %}
+ {# --- Баннер: конец --- #} +
+{% include "report/report_last_user_visit.html" %} +{% include "report/report_log_user_visit.html" %} +
+
{% endblock %} + + {% comment %} +{% block Top_Nav_Bar %} + {# ОТЛАДКА, ГАСИМ ВЕРХНЕЕ МЕНЮ #} +{% endblock %} +{% endcomment %} + diff --git a/oknardia/web/catalog.py b/oknardia/web/catalog.py index 075fe92..ff039c1 100644 --- a/oknardia/web/catalog.py +++ b/oknardia/web/catalog.py @@ -1,8 +1,11 @@ # -*- coding: utf-8 -*- from django.shortcuts import render from django.http import HttpRequest, HttpResponse +from django.utils import timezone +from oknardia.models import PVCprofiles from web.report1 import get_last_all_user_visit_list, get_last_user_visit_cookies, get_last_user_visit_list -from time import time +import time +import pytils def catalog_root(request: HttpRequest) -> HttpResponse: @@ -13,16 +16,91 @@ def catalog_root(request: HttpRequest) -> HttpResponse: :param request: HttpRequest -- входящий http-запрос :return response: HttpResponse -- исходящий http-ответ """ - time_start = time() - to_template = {} # словарь, для передачи шаблону + time_start = time.time() template = "catalog/catalog_root.html" # шаблон # получаем из cookies последние визиты клиента - last_visit = get_last_user_visit_cookies(request) - to_template.update({'LAST_VISIT': get_last_user_visit_list(last_visit[:3])}) - # получаем последние визиты всех посетителей из базы - # id2log, log_visit = get_last_all_user_visit_list() - log_visit = get_last_all_user_visit_list() - to_template.update({'LOG_VISIT': log_visit}) - to_template.update({'ticks': float(time() - time_start)}) + to_template = { + 'LAST_VISIT': get_last_user_visit_list(get_last_user_visit_cookies(request)[:3]), + 'LOG_VISIT': get_last_all_user_visit_list(), + 'ticks': float(time.time() - time_start)} response = render(request, template, to_template) return response + + +# Каталог профилей (первый уровень) +def catalog_profile(request: HttpRequest) -> HttpResponse: + template = "catalog/catalog_of_profiles.html" # шаблон + time_start = time.time() + q_profile = PVCprofiles.objects.raw('SELECT' + ' oknardia_pvcprofiles.id,' + ' oknardia_pvcprofiles.sProfileName,' + ' oknardia_pvcprofiles.sProfileBriefDescription,' + ' oknardia_pvcprofiles.sProfileManufacturer,' + ' oknardia_catalog2profile.sCatalogCardType,' + ' oknardia_blogposts.sPostContent,' + ' oknardia_blogposts.sPostHeader,' + 'oknardia_pvcprofiles.dProfileModify,' + 'MAX(oknardia_blogposts.dPostDataModify) AS lastBlog ' + 'FROM oknardia_catalog2profile' + ' RIGHT OUTER JOIN oknardia_pvcprofiles' + ' ON oknardia_catalog2profile.kProfile_id = oknardia_pvcprofiles.id' + ' LEFT OUTER JOIN oknardia_blogposts' + ' ON oknardia_catalog2profile.kBlogCatalog_id = oknardia_blogposts.id ' + 'GROUP BY oknardia_catalog2profile.sCatalogCardType,' + ' oknardia_pvcprofiles.sProfileName,' + ' oknardia_pvcprofiles.id,' + ' oknardia_pvcprofiles.sProfileBriefDescription,' + ' oknardia_pvcprofiles.sProfileManufacturer,' + ' oknardia_blogposts.sPostHeader,' + ' oknardia_blogposts.sPostContent,' + ' oknardia_pvcprofiles.dProfileModify ' + 'ORDER BY oknardia_pvcprofiles.sProfileManufacturer,' + ' oknardia_pvcprofiles.sProfileBriefDescription;') + to_template = {'CATALOG_PROFILE_NUM': pytils.numeral.get_plural(len(list(q_profile)), "профиль,профиля,профилей")} + list_profile_manufactures = [] + tmp_profile_manufacture = "" + last_update = None + for i in q_profile: + if last_update is None: + last_update = i.dProfileModify + if last_update < i.dProfileModify: + last_update = i.dProfileModify + # if (i.lastBlog is not None) and (last_update < i.lastBlog): + # last_update = i.lastBlog + if tmp_profile_manufacture != i.sProfileManufacturer: + tmp_profile_manufacture = i.sProfileManufacturer + list_profile_manufactures.append({ + "PROF_MAN_ID": i.id, + "PROF_MAN": i.sProfileManufacturer, + "PROF_MAN_T": pytils.translit.slugify(i.sProfileManufacturer).lower(), + "PROF_MAN_LIST": [{ + "PROF_NAME_ID": i.id, + "PROF_NAME": i.sProfileBriefDescription, + "PROF_NAME_T": pytils.translit.slugify(i.sProfileName).lower(), + }] + }) + # print("===", i.sProfileManufacturer, ">>> >>> >>>", Rus2Url(i.sProfileManufacturer)) + elif len(list_profile_manufactures) == 0: + # Какая-то фигня. Похоже "пустой" производитель профиля (пустая строка). Ну его нафиг. + continue + else: + list_profile_manufactures[-1]["PROF_MAN_LIST"].append({ + "PROF_NAME_ID": i.id, + "PROF_NAME": i.sProfileBriefDescription, + "PROF_NAME_T": pytils.translit.slugify(i.sProfileName).lower(), + }) + # print(\"--- ---", i.sProfileBriefDescription, ">>>", Rus2Url(i.sProfileBriefDescription)) + to_template.update({ + 'CATALOG_PROFILE_MAN1_NAME2': list_profile_manufactures, + 'CATALOG_MANUFACT_NUM': len(list_profile_manufactures), + 'CATALOG_MANUFACT_NUM_W': + pytils.numeral.sum_string(len(list_profile_manufactures), pytils.numeral.MALE, ("производитель", + "производителя", + "производителей")), + 'CATALOG_LAST_UPDATE': last_update, + 'CATALOG_LAST_UPDATE_W': pytils.dt.distance_of_time_in_words(time.mktime(last_update.timetuple()), accuracy=2), + 'LAST_VISIT': get_last_user_visit_list(get_last_user_visit_cookies(request)[:3]), + 'LOG_VISIT': get_last_all_user_visit_list(), + 'ticks': float(time.time() - time_start) + }) + return render(request, template, to_template)