From 02eb295acc0682bb6fa5896ca9e147829dc63fae Mon Sep 17 00:00:00 2001 From: SDE Date: Sat, 9 Dec 2023 18:43:22 +0300 Subject: [PATCH] 0.2.2 feedback_form, contacts models --- BaseModels/base_models.py | 7 + GeneralApp/forms.py | 1 + GeneralApp/funcs.py | 22 ++- GeneralApp/js_urls.py | 9 + GeneralApp/js_views.py | 94 ++++++++++ GeneralApp/migrations/0018_office_contact.py | 74 ++++++++ GeneralApp/models.py | 166 +++++++++--------- pAerBim/urls.py | 1 + static/aerbimCSS.css | 6 +- static/aerbimJS.js | 6 +- templates/blocks/b_how_dev.html | 2 +- templates/forms/f_consultation.html | 2 +- ...consultation_form.html => f_feedback.html} | 9 +- templates/mail/mt_simple_letter.html | 73 ++++++++ .../pages/content/c_section_content.html | 5 +- templates/widgets/w_form_after_send.html | 3 + templates/widgets/w_one_present_aerBim.html | 2 +- 17 files changed, 382 insertions(+), 100 deletions(-) create mode 100644 GeneralApp/js_urls.py create mode 100644 GeneralApp/js_views.py create mode 100644 GeneralApp/migrations/0018_office_contact.py rename templates/forms/{f_consultation_form.html => f_feedback.html} (57%) create mode 100644 templates/mail/mt_simple_letter.html create mode 100644 templates/widgets/w_form_after_send.html diff --git a/BaseModels/base_models.py b/BaseModels/base_models.py index 788ccce..5ef46b8 100644 --- a/BaseModels/base_models.py +++ b/BaseModels/base_models.py @@ -148,6 +148,13 @@ class BaseModelViewPage(BaseModel): class Meta: abstract = True + def get_feedback_block(self): + blocks = self.get_blocks() + for block in blocks: + if block.block_type == 'feedback_form': + return block + return None + def get_slides(self): return self.slides.filter(enable=True).order_by('order') diff --git a/GeneralApp/forms.py b/GeneralApp/forms.py index 827be09..4dbda2b 100644 --- a/GeneralApp/forms.py +++ b/GeneralApp/forms.py @@ -9,6 +9,7 @@ from django.forms import widgets class FeedbackForm(forms.Form): # account_type = forms.ChoiceField(choices=account_type_choices, initial='sender', required=True) + form_name = forms.CharField(label=_('Название формы'), required=True) name = forms.CharField(label=_('Имя'), required=True) company = forms.CharField(label=_('Компания'), required=True) diff --git a/GeneralApp/funcs.py b/GeneralApp/funcs.py index 0a84d88..d893d0f 100644 --- a/GeneralApp/funcs.py +++ b/GeneralApp/funcs.py @@ -1,21 +1,33 @@ from django.http import HttpResponse, Http404, FileResponse from admin_interface.templatetags.admin_interface_tags import get_admin_interface_theme +def get_logo_url(): + theme = get_admin_interface_theme() + return theme.logo.url -def get_inter_Dict(user): +def get_inter_Dict(user, context_Dict): + form_name = None Dict = {} from ServicesApp.funcs import get_sections sections = get_sections() - theme = get_admin_interface_theme() + + if 'page' in context_Dict and context_Dict['page']: + fb_block = context_Dict['page'].get_feedback_block() + if fb_block: + form_name = fb_block.name + from .forms import FeedbackForm + feedback_form = FeedbackForm() + if form_name: + feedback_form.initial = {'form_name': form_name} Dict.update({ 'sections': sections, - 'logo': theme.logo.url, - 'feedback_form': FeedbackForm(), + 'logo': get_logo_url(), + 'feedback_form': feedback_form, }) # from SubscribesApp.funcs import get_cur_user_subscribe # user_subscribe = get_cur_user_subscribe(user) @@ -26,6 +38,6 @@ def get_inter_Dict(user): def get_inter_http_respose(template_obj, context_Dict, request): - context_Dict.update(get_inter_Dict(request.user)) + context_Dict.update(get_inter_Dict(request.user, context_Dict)) return HttpResponse(template_obj.render(context_Dict, request)) \ No newline at end of file diff --git a/GeneralApp/js_urls.py b/GeneralApp/js_urls.py new file mode 100644 index 0000000..4df4231 --- /dev/null +++ b/GeneralApp/js_urls.py @@ -0,0 +1,9 @@ +from django.contrib import admin +from django.urls import path, include +from django.conf.urls.static import static +from django.conf import settings +from .js_views import * + +urlpatterns = [ + path('send_feedback_form/', send_feedback_form_ajax, name='send_feedback_form_ajax'), +] \ No newline at end of file diff --git a/GeneralApp/js_views.py b/GeneralApp/js_views.py new file mode 100644 index 0000000..3377c06 --- /dev/null +++ b/GeneralApp/js_views.py @@ -0,0 +1,94 @@ +import json + +from django.shortcuts import render + +from uuid import uuid1 + +from .forms import FeedbackForm +from .models import * +from django.contrib import auth +from django.http import HttpResponse, Http404, JsonResponse +from django.template import loader, RequestContext +from django.contrib.auth.decorators import login_required +from BaseModels.mailSender import techSendMail +from django.utils.translation import gettext as _ +from datetime import datetime +from django.template.loader import render_to_string +from django.urls import reverse +from .funcs import * +from django.utils.translation import activate, get_language_info +from BaseModels.mailSender import admin_send_mail_by_SMTPlib +from .funcs_options import get_mail_send_options, get_first_option_value_by_opt_type, get_options_by_opt_types + + +def send_feedback_form_ajax(request): + + if request.method != 'POST': + raise Http404 + + try: + + data = request.POST + # if not data and request.body: + # data = json.loads(request.body) + + feedback_form = FeedbackForm(data=data) + + if not feedback_form.is_valid(): + feedback_form.initial = data + Dict = {'feedback_form': feedback_form} + html = render_to_string('forms/f_feedback.html', Dict, request=request) + return JsonResponse({'html': html}, status=400) + + subject = f'Сообщение из формы "{data["form_name"]}"' + + sets = get_options_by_opt_types(['domain', 'project_name'], only_vals=True) + + message_text = (f'

{_("ДАННЫЕ ЗАПРОСА")}

' + f'

') + for f_name, f_val in data.items(): + message_text += f'{f_name}: {f_val}
' + + message_text += f'

' + + Dict = { + 'logo': f'{request.scheme}://{sets["domain"]}{get_logo_url()}', + 'project_name': sets['project_name'], + 'message_title': subject, + 'message_text': message_text + } + + + html = render_to_string('mail/mt_simple_letter.html', Dict, request=request) + + + to = [get_first_option_value_by_opt_type('corp_email'), 'web@syncsystems.net'] + + mail_sets = get_mail_send_options() + msg = admin_send_mail_by_SMTPlib( + mail_sets, subject=subject, + from_email=mail_sets['sender_email'], to=to, html_content=html, + ) + print(msg) + + + Dict = { + } + + html = render_to_string('widgets/w_form_after_send.html', Dict, request=request) + + res_Dict = { + 'html': html, + } + + return JsonResponse(res_Dict) + + except Exception as e: + msg = f' send_feedback_form_ajax ошибка в запросе = {str(e)}' + print(msg) + errors_Dict = { + 'errors': msg + } + return JsonResponse(errors_Dict, status=400) + + diff --git a/GeneralApp/migrations/0018_office_contact.py b/GeneralApp/migrations/0018_office_contact.py new file mode 100644 index 0000000..5e361bc --- /dev/null +++ b/GeneralApp/migrations/0018_office_contact.py @@ -0,0 +1,74 @@ +# Generated by Django 4.2.7 on 2023-12-09 18:42 + +import BaseModels.base_models +import ckeditor_uploader.fields +import datetime +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('GeneralApp', '0017_block_bg_video_url_block_video_url_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Office', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')), + ('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')), + ('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')), + ('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')), + ('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')), + ('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')), + ('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')), + ('url', models.TextField(help_text='можно изменить адрес страницы (!!! ВНИМАНИЕ !!! поисковые системы потеряют страницу и найдут лишь спустя неделю...месяц)', unique=True, verbose_name='URL привязанной страницы')), + ('title', models.TextField(blank=True, null=True, verbose_name='Заголовок')), + ('description', ckeditor_uploader.fields.RichTextUploadingField(blank=True, help_text='краткое описание страницы (до 240 символов)', null=True, verbose_name='Краткое описание')), + ('text', ckeditor_uploader.fields.RichTextUploadingField(blank=True, null=True, verbose_name='Полное описание')), + ('picture', models.FileField(blank=True, null=True, upload_to='uploads/', validators=[BaseModels.base_models.validate_file_extension], verbose_name='Картинка')), + ('visible', models.BooleanField(default=True, verbose_name='Отображать')), + ('seo_title', models.CharField(blank=True, max_length=250, null=True, verbose_name='Title (80 знаков)')), + ('seo_description', models.CharField(blank=True, max_length=250, null=True, verbose_name='Description (150 знаков)')), + ('seo_keywords', models.CharField(blank=True, max_length=250, null=True, verbose_name='Keywords (200 знаков)')), + ('seo_text', ckeditor_uploader.fields.RichTextUploadingField(blank=True, null=True, verbose_name='Текст SEO статьи')), + ('FAQ_title', models.CharField(blank=True, max_length=250, null=True, verbose_name='FAQ Заголовок')), + ('city', models.CharField(max_length=250, verbose_name='Город')), + ('address', models.CharField(blank=True, max_length=250, null=True, verbose_name='Адрес')), + ('workTime', models.CharField(max_length=220, verbose_name='Комментарий к времени работы')), + ('work_time_from', models.TimeField(default=datetime.datetime(2023, 12, 9, 9, 0), verbose_name='Время работы с')), + ('work_time_to', models.TimeField(default=datetime.datetime(2023, 12, 9, 18, 0), verbose_name='Время работы до')), + ], + options={ + 'verbose_name': 'Подразделения', + 'verbose_name_plural': 'Подразделение', + 'ordering': ['order', 'city', 'name'], + }, + ), + migrations.CreateModel( + name='Contact', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')), + ('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')), + ('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')), + ('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')), + ('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')), + ('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')), + ('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')), + ('contact_type', models.CharField(choices=[('phone', 'Телефон'), ('fax', 'Факс'), ('email', 'email'), ('messenger', 'Мессенджер')], default='phone', max_length=50, verbose_name='Тип контакта')), + ('contact_label', models.CharField(blank=True, max_length=50, null=True, verbose_name='Метка контакта')), + ('contact_prefix', models.CharField(blank=True, max_length=50, null=True, verbose_name='Префикс контакта')), + ('contact_data', models.CharField(max_length=50, verbose_name='Номер телефона')), + ('office', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rel_contacts_for_office', to='GeneralApp.office', verbose_name='Офис')), + ], + options={ + 'verbose_name': 'Контакт', + 'verbose_name_plural': 'Контакты', + 'ordering': ['order', 'contact_type', 'contact_label'], + }, + ), + ] diff --git a/GeneralApp/models.py b/GeneralApp/models.py index 010f32f..bd3b7f1 100644 --- a/GeneralApp/models.py +++ b/GeneralApp/models.py @@ -178,28 +178,28 @@ class Office(BaseModelViewPage): work_time_to = models.TimeField(verbose_name=_('Время работы до'), default=work_time_default_to()) # email = models.CharField(max_length=50,verbose_name=_(u'e-mail'), null=True, blank=True) - legal_name = models.CharField(max_length=250, verbose_name=_(u'Юридическое название'), null=True, blank=True) - legal_address = models.CharField(max_length=250, verbose_name=_(u'Адрес'), null=True, blank=True) - unp = models.CharField(max_length=250, verbose_name=_(u'Номер налогоплательщика'), null=True, blank=True) - urInfo = RichTextUploadingField(verbose_name=_(u'Юридическая информация'), null=True, blank=True) - legal_docs_text = models.TextField( - verbose_name=_(u'Данные о свидетельствах и сертификатах'), null=True, blank=True - ) - - fullContactInfo = RichTextUploadingField( - verbose_name=_(u'Контактные данные'), null=True, blank=True) - map_code = models.TextField(verbose_name=_(u'код карты'), null=True, blank=True) - - main_office = models.BooleanField(verbose_name='Главный офис', default=False) - - gps_longitude = models.DecimalField( - max_digits=22, decimal_places=16, verbose_name='GPS Долгота', blank=True, null=True - ) - gps_latitude = models.DecimalField( - max_digits=22, decimal_places=16, verbose_name='GPS Широта', blank=True, null=True - ) - - footer_info = RichTextUploadingField(verbose_name=_('Информация в подвале'), null=True, blank=True) + # legal_name = models.CharField(max_length=250, verbose_name=_(u'Юридическое название'), null=True, blank=True) + # legal_address = models.CharField(max_length=250, verbose_name=_(u'Адрес'), null=True, blank=True) + # unp = models.CharField(max_length=250, verbose_name=_(u'Номер налогоплательщика'), null=True, blank=True) + # urInfo = RichTextUploadingField(verbose_name=_(u'Юридическая информация'), null=True, blank=True) + # legal_docs_text = models.TextField( + # verbose_name=_(u'Данные о свидетельствах и сертификатах'), null=True, blank=True + # ) + # + # fullContactInfo = RichTextUploadingField( + # verbose_name=_(u'Контактные данные'), null=True, blank=True) + # map_code = models.TextField(verbose_name=_(u'код карты'), null=True, blank=True) + # + # main_office = models.BooleanField(verbose_name='Главный офис', default=False) + # + # gps_longitude = models.DecimalField( + # max_digits=22, decimal_places=16, verbose_name='GPS Долгота', blank=True, null=True + # ) + # gps_latitude = models.DecimalField( + # max_digits=22, decimal_places=16, verbose_name='GPS Широта', blank=True, null=True + # ) + # + # footer_info = RichTextUploadingField(verbose_name=_('Информация в подвале'), null=True, blank=True) def __str__(self): return self.name @@ -239,20 +239,22 @@ class Office(BaseModelViewPage): contact_type_choice = ( - ('phone', 'Телефон'), - ('email', 'email'), - ('messenger', 'Мессенджер'), + ('phone', _('Телефон')), + ('fax', _('Факс')), + ('email', _('email')), + ('messenger', _('Мессенджер')), ) class Contact(BaseModel): contact_type = models.CharField( - max_length=50, choices=contact_type_choice, verbose_name=_(u'Тип контакта'), default='phone' + max_length=50, choices=contact_type_choice, verbose_name=_('Тип контакта'), default='phone' ) - contact_label = models.CharField(max_length=50, verbose_name=_(u'Метка контакта'), null=True, blank=True) - contact_prefix = models.CharField(max_length=50, verbose_name=_(u'Префикс контакта'), null=True, blank=True) - contact_data = models.CharField(max_length=50, verbose_name=_(u'Номер телефона')) - office = models.ForeignKey(Office, verbose_name='Офис', related_name='rel_contacts_for_office', on_delete=models.CASCADE) + contact_label = models.CharField(max_length=50, verbose_name=_('Метка контакта'), null=True, blank=True) + contact_prefix = models.CharField(max_length=50, verbose_name=_('Префикс контакта'), null=True, blank=True) + contact_data = models.CharField(max_length=50, verbose_name=_('Номер телефона')) + office = models.ForeignKey( + Office, verbose_name=_('Офис'), related_name='rel_contacts_for_office', on_delete=models.CASCADE) def __str__(self): if self.name: @@ -271,62 +273,62 @@ class Contact(BaseModel): class Meta: - verbose_name=_(u'Контакт') - verbose_name_plural = _(u'Контакты') + verbose_name=_('Контакт') + verbose_name_plural = _('Контакты') ordering = ['order', 'contact_type', 'contact_label'] -class FooterBlockModel(BaseModel): - url = models.CharField(max_length=250, verbose_name=u'URL привязанной страницы', help_text=u'адрес страницы на которую ведет данная ссылка)', null=True, blank=True) - enable_bullets = models.BooleanField(default=False, verbose_name='Включить метки') - - def __str__(self): - if self.name: - return self.name - else: - return self.id - - class Meta: - verbose_name=u'Блок подвала' - verbose_name_plural =u'Блоки подвала' - ordering = ['order', 'name'] - -class FooterLinkModel(BaseModel): - footer_block = models.ForeignKey(FooterBlockModel,verbose_name='Блок', related_name='rel_footer_block', on_delete=models.CASCADE) - url = models.CharField(max_length=250, verbose_name=u'URL привязанной страницы', help_text=u'адрес страницы на которую ведет данная ссылка)', null=True, blank=True) - - def __str__(self): - if self.name: - return self.name - else: - return self.id - - class Meta: - verbose_name=u'Ссылка подвала' - verbose_name_plural =u'Ссылки подвала' - ordering = ['order', 'name'] - - - -# class HeaderLinkModel(FooterLinkModel): +# class FooterBlockModel(BaseModel): +# url = models.CharField(max_length=250, verbose_name=u'URL привязанной страницы', help_text=u'адрес страницы на которую ведет данная ссылка)', null=True, blank=True) +# enable_bullets = models.BooleanField(default=False, verbose_name='Включить метки') +# +# def __str__(self): +# if self.name: +# return self.name +# else: +# return self.id +# +# class Meta: +# verbose_name=u'Блок подвала' +# verbose_name_plural =u'Блоки подвала' +# ordering = ['order', 'name'] +# +# class FooterLinkModel(BaseModel): +# footer_block = models.ForeignKey(FooterBlockModel,verbose_name='Блок', related_name='rel_footer_block', on_delete=models.CASCADE) +# url = models.CharField(max_length=250, verbose_name=u'URL привязанной страницы', help_text=u'адрес страницы на которую ведет данная ссылка)', null=True, blank=True) +# +# def __str__(self): +# if self.name: +# return self.name +# else: +# return self.id +# +# class Meta: +# verbose_name=u'Ссылка подвала' +# verbose_name_plural =u'Ссылки подвала' +# ordering = ['order', 'name'] +# +# +# +# # class HeaderLinkModel(FooterLinkModel): +# # +# # class Meta: +# # verbose_name=u'Ссылка козырька' +# # verbose_name_plural =u'Ссылки козырька' +# # ordering = ['order', 'name'] +# +# +# class HeaderLink(BaseModel): +# url = models.CharField(max_length=250, verbose_name=u'URL привязанной страницы', +# help_text=u'адрес страницы на которую ведет данная ссылка)', null=True, blank=True) +# +# def __str__(self): +# if self.name: +# return self.name +# else: +# return self.id # # class Meta: # verbose_name=u'Ссылка козырька' # verbose_name_plural =u'Ссылки козырька' -# ordering = ['order', 'name'] - - -class HeaderLink(BaseModel): - url = models.CharField(max_length=250, verbose_name=u'URL привязанной страницы', - help_text=u'адрес страницы на которую ведет данная ссылка)', null=True, blank=True) - - def __str__(self): - if self.name: - return self.name - else: - return self.id - - class Meta: - verbose_name=u'Ссылка козырька' - verbose_name_plural =u'Ссылки козырька' - ordering = ['order', 'name'] \ No newline at end of file +# ordering = ['order', 'name'] \ No newline at end of file diff --git a/pAerBim/urls.py b/pAerBim/urls.py index 45109b5..1aa9686 100644 --- a/pAerBim/urls.py +++ b/pAerBim/urls.py @@ -9,6 +9,7 @@ urlpatterns = [ path('i18n/', include('django.conf.urls.i18n')), path('', include('ServicesApp.js_urls')), + path('', include('GeneralApp.js_urls')) ] from django.conf.urls.i18n import i18n_patterns diff --git a/static/aerbimCSS.css b/static/aerbimCSS.css index 0b3b8a1..d9d7d83 100644 --- a/static/aerbimCSS.css +++ b/static/aerbimCSS.css @@ -94,8 +94,8 @@ body.n_scroll{ /*font-family: Spline Sans;*/ /*font-family: -apple-system, 'Raleway-Regular', sans-serif;*/ - font-size: 16px; - font-weight: 500; + font-size: 14px; + /*font-weight: 500;*/ line-height: normal; } @@ -1111,7 +1111,7 @@ body.n_scroll{ .title_w_one_present{ color: #000000; text-transform: uppercase; - font-size: 36px; + font-size: 30px; font-weight: 600; } diff --git a/static/aerbimJS.js b/static/aerbimJS.js index 4520f80..897579e 100644 --- a/static/aerbimJS.js +++ b/static/aerbimJS.js @@ -245,9 +245,9 @@ function sendFormConsultation (el){ // async: true, cache: false, processData: false, - // contentType: false, - // enctype: 'json', - contentType: "application/json; charset=utf-8", + enctype: 'multipart/form-data', + contentType: false, + // contentType: "application/json; charset=utf-8", data: formData, success: function(data){ document.querySelector(".container_content_form_consultation").innerHTML = data.html diff --git a/templates/blocks/b_how_dev.html b/templates/blocks/b_how_dev.html index 51c22ee..32c30dd 100644 --- a/templates/blocks/b_how_dev.html +++ b/templates/blocks/b_how_dev.html @@ -11,7 +11,7 @@
- 0{{ forloop.counter }} {{ w.name }} + 0{{ forloop.counter }}. {{ w.name }}
diff --git a/templates/forms/f_consultation.html b/templates/forms/f_consultation.html index f1316e7..87e898e 100644 --- a/templates/forms/f_consultation.html +++ b/templates/forms/f_consultation.html @@ -6,7 +6,7 @@
- {% include 'forms/f_consultation_form.html' %} + {% include 'forms/f_feedback.html' %}
diff --git a/templates/forms/f_consultation_form.html b/templates/forms/f_feedback.html similarity index 57% rename from templates/forms/f_consultation_form.html rename to templates/forms/f_feedback.html index 9979a7d..bfa742f 100644 --- a/templates/forms/f_consultation_form.html +++ b/templates/forms/f_feedback.html @@ -6,12 +6,15 @@
{{ block.description|linebreaksbr }}
+ +
+ - - - + + +
\ No newline at end of file diff --git a/templates/mail/mt_simple_letter.html b/templates/mail/mt_simple_letter.html new file mode 100644 index 0000000..2dcc133 --- /dev/null +++ b/templates/mail/mt_simple_letter.html @@ -0,0 +1,73 @@ + +
+
+
+ {{ project_name }} +
+

+ {{ message_title|safe }} +

+
+{#

#} + {{ message_text|safe|linebreaksbr }} +{#

#} +
+ {% for button in message_buttons %} +
+ +
+ {{ button.caption }} +
+
+
+ {% endfor %} + + +
+
+
+{# Адрес кафе: Минск, ул. Будславская, 2#} +{#
#} +{# График работы: пн-вс 12:00 - 24:00#} +{#
#} +{# Телефоны кафе: +375 44 77 321 77#} +
+
+ +
+{# #} +{#
О ДОСТАВКЕ#} +{#
#} +{#
#} +{# #} +{#
О BALDENINI CAFE#} +{#
#} +{#
#} +
+ +
+
\ No newline at end of file diff --git a/templates/pages/content/c_section_content.html b/templates/pages/content/c_section_content.html index d3aa5f5..b1b8398 100644 --- a/templates/pages/content/c_section_content.html +++ b/templates/pages/content/c_section_content.html @@ -4,7 +4,7 @@
- {% if page.description or page.title %} + {% if page.description or page.title or page.text %} {% if page.description %}
{{ page.description }}
@@ -12,6 +12,9 @@ {% if page.title %}
{{ page.title }}
{% endif %} + {% if page.text %} +
{{ page.text|safe }}
+ {% endif %} {% endif %}
diff --git a/templates/widgets/w_form_after_send.html b/templates/widgets/w_form_after_send.html new file mode 100644 index 0000000..b3f22dd --- /dev/null +++ b/templates/widgets/w_form_after_send.html @@ -0,0 +1,3 @@ +
+ Сообщение отправлено +
\ No newline at end of file diff --git a/templates/widgets/w_one_present_aerBim.html b/templates/widgets/w_one_present_aerBim.html index 9b02b8c..a864a8c 100644 --- a/templates/widgets/w_one_present_aerBim.html +++ b/templates/widgets/w_one_present_aerBim.html @@ -9,7 +9,7 @@ {% if widget.description %}
- {{ widget.description }} + {{ widget.description|safe|linebreaksbr }}
{% endif %} {% with name_w='presentAerBim' %}