Страница: "Каталог / Оконные профили" -- redy
This commit is contained in:
@@ -53,6 +53,7 @@ urlpatterns = [
|
|||||||
re_path(r'^stat/rating/profiles_rank[/*]$', report2.profiles_rating),
|
re_path(r'^stat/rating/profiles_rank[/*]$', report2.profiles_rating),
|
||||||
# КАТАЛОГ
|
# КАТАЛОГ
|
||||||
re_path(r'^catalog[/*]$', catalog.catalog_root),
|
re_path(r'^catalog[/*]$', catalog.catalog_root),
|
||||||
|
re_path(r'^catalog/profile[/*]$', catalog.catalog_profile),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
64
oknardia/templates/catalog/catalog_of_profiles.html
Executable file
64
oknardia/templates/catalog/catalog_of_profiles.html
Executable file
@@ -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 %}
|
||||||
|
<div class="container-fluid">
|
||||||
|
{# <!--- Хлебные крошки: НАЧАЛО --> #}<div class="row">
|
||||||
|
<div class="col-md-11 col-xs-12">
|
||||||
|
<ol class="breadcrumb">
|
||||||
|
<li><a href="/">Главная</a></li>
|
||||||
|
<li><a href="/catalog/">Каталог</a></li>
|
||||||
|
<li>Оконные профили</li>
|
||||||
|
</ol>
|
||||||
|
<h1>Каталог оконных профилей</h1>
|
||||||
|
<p>Узнать о производителях, познакомиться с детальными характеристики и описаниями оконных профилей можно кликнув по ссылкам. Сейчас в каталоге «Окнардии» представлено {{ CATALOG_MANUFACT_NUM_W }} профилей ({{ CATALOG_PROFILE_NUM }} в базе). Последнее обновление {{ CATALOG_LAST_UPDATE_W }}.</p>
|
||||||
|
</div>
|
||||||
|
</div>{# <!--- Хлебные крошки: КОНЕЦ ---> #}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-11 col-xs-12 catalog2-header">
|
||||||
|
<ul><li>производитель</li><ul><li>название или марка профиля</li></ul></ul>
|
||||||
|
<ul><li>производитель</li><ul><li>название или марка профиля</li></ul></ul>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-11 col-xs-12 catalog2">
|
||||||
|
<ul>{% for manuf in CATALOG_PROFILE_MAN1_NAME2 %}
|
||||||
|
<li><a href="/catalog/profile/{{ manuf.PROF_MAN_ID }}-{{ manuf.PROF_MAN_T }}/">{{ manuf.PROF_MAN }}</a></li>{% if manuf.PROF_MAN_LIST|length != 0 %}
|
||||||
|
<uL>{% for prof_name in manuf.PROF_MAN_LIST %}
|
||||||
|
<lI><a href="/catalog/profile/{{ prof_name.PROF_NAME_ID }}{# manuf.PROF_MAN_ID #}-{{ manuf.PROF_MAN_T }}/{{ prof_name.PROF_NAME_ID }}-{{ prof_name.PROF_NAME_T }}/">{{ prof_name.PROF_NAME }}</a></lI>{% endfor %}
|
||||||
|
</uL>{% endif %}{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-11 col-xs-12 catalog_footer">
|
||||||
|
<p><small>Информация об оконных профилях для каталога «Окнардия» предоставлена производителями или собрана из открытых источников. Для исправления неточностей, уточнения характеристик, коррекции описаний и добавления информацию о новых производителях или моделях оконных профилей, пишите на <script type="text/javascript">document.write("<a href='mai"+"lto:in" + "fo@" + "oknardia." + "ru?subject=ОКНАРДИЯ: каталог профилей (уточнения, испраления, добавления)'>info@"+"oknardia.ru</a>");</script>. Размещение в каталоге «Окнардия» бесплатно.</small></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{# --- Баннер: НАЧАЛО --- #}
|
||||||
|
<div class="row"><div class="col-md-12 col-xs-12"><hr class="dotted-black" />{% include "ad/bannet-wide.html" %}</div></div>
|
||||||
|
{# --- Баннер: конец --- #}
|
||||||
|
<div class="row">
|
||||||
|
{% include "report/report_last_user_visit.html" %}
|
||||||
|
{% include "report/report_log_user_visit.html" %}
|
||||||
|
</div>
|
||||||
|
</div>{% endblock %}
|
||||||
|
|
||||||
|
{% comment %}
|
||||||
|
{% block Top_Nav_Bar %}
|
||||||
|
{# ОТЛАДКА, ГАСИМ ВЕРХНЕЕ МЕНЮ #}
|
||||||
|
{% endblock %}
|
||||||
|
{% endcomment %}
|
||||||
|
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.http import HttpRequest, HttpResponse
|
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 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:
|
def catalog_root(request: HttpRequest) -> HttpResponse:
|
||||||
@@ -13,16 +16,91 @@ def catalog_root(request: HttpRequest) -> HttpResponse:
|
|||||||
:param request: HttpRequest -- входящий http-запрос
|
:param request: HttpRequest -- входящий http-запрос
|
||||||
:return response: HttpResponse -- исходящий http-ответ
|
:return response: HttpResponse -- исходящий http-ответ
|
||||||
"""
|
"""
|
||||||
time_start = time()
|
time_start = time.time()
|
||||||
to_template = {} # словарь, для передачи шаблону
|
|
||||||
template = "catalog/catalog_root.html" # шаблон
|
template = "catalog/catalog_root.html" # шаблон
|
||||||
# получаем из cookies последние визиты клиента
|
# получаем из cookies последние визиты клиента
|
||||||
last_visit = get_last_user_visit_cookies(request)
|
to_template = {
|
||||||
to_template.update({'LAST_VISIT': get_last_user_visit_list(last_visit[:3])})
|
'LAST_VISIT': get_last_user_visit_list(get_last_user_visit_cookies(request)[:3]),
|
||||||
# получаем последние визиты всех посетителей из базы
|
'LOG_VISIT': get_last_all_user_visit_list(),
|
||||||
# id2log, log_visit = get_last_all_user_visit_list()
|
'ticks': float(time.time() - time_start)}
|
||||||
log_visit = get_last_all_user_visit_list()
|
|
||||||
to_template.update({'LOG_VISIT': log_visit})
|
|
||||||
to_template.update({'ticks': float(time() - time_start)})
|
|
||||||
response = render(request, template, to_template)
|
response = render(request, template, to_template)
|
||||||
return response
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user