diff --git a/api/v1/serializers/contest.py b/api/v1/serializers/contest.py index dc5b88fd..9d2e63c4 100644 --- a/api/v1/serializers/contest.py +++ b/api/v1/serializers/contest.py @@ -1,3 +1,4 @@ +from django.contrib.auth import get_user_model from rest_framework import serializers from api.v1.serializers.content import ContentSerializer, ContentCreateSerializer, ImageObjectSerializer @@ -5,6 +6,8 @@ from api.v1.serializers.mixins import DispatchContentMixin from apps.content.models import (Contest, ContestWork) +User = get_user_model() + class ContestSerializer(serializers.ModelSerializer): cover = ImageObjectSerializer() @@ -12,7 +15,8 @@ class ContestSerializer(serializers.ModelSerializer): class Meta: model = Contest - fields = '__all__' + fields = ['title', 'description', 'slug', 'cover', + 'date_start', 'date_end', 'active', 'content', 'finished'] class ContestCreateSerializer(DispatchContentMixin, serializers.ModelSerializer): @@ -52,11 +56,14 @@ class ContestWorkSerializer(serializers.ModelSerializer): 'created_at', 'likes', 'user_liked', 'img_width', 'img_height'] def get_likes(self, instance): - return instance.likes.count() + return instance.likes.filter(user__is_active=True).count() def get_user_liked(self, instance): - user = self.context['request'].user - return instance.likes.filter(user=user).exists() if user.is_authenticated else False + # FIXME + user = self.context['request'].query_params.get('current_user') + if user: + user = User.objects.get(pk=user) + return instance.likes.filter(user=user).exists() if user else False class ContestWorkCreateSerializer(serializers.ModelSerializer): diff --git a/api/v1/serializers/course.py b/api/v1/serializers/course.py index fe06ca53..4382aae4 100644 --- a/api/v1/serializers/course.py +++ b/api/v1/serializers/course.py @@ -71,14 +71,10 @@ class LikeSerializer(serializers.ModelSerializer): class LikeCreateSerializer(serializers.ModelSerializer): - OBJ_TYPE_CONTEST_WORK = 'contest_work' - - obj_type = serializers.CharField(required=True) - obj_id = serializers.IntegerField(required=True) class Meta: model = Like - fields = ['user', 'obj_type', 'obj_id'] + fields = ['user'] def create(self, validated_data): # FIXME @@ -86,20 +82,9 @@ class LikeCreateSerializer(serializers.ModelSerializer): user = validated_data.get('user') else: user = self.context['request'].user - if not user: # FIXME and user.is_authenticated): - return Like() - obj_type = validated_data.pop('obj_type') - obj_id = validated_data.pop('obj_id') client_ip, is_routable = get_client_ip(self.context['request']) - if obj_type == self.OBJ_TYPE_CONTEST_WORK: - contest_work = ContestWork.objects.get(pk=obj_id) - # FIXME in prod: fixed - if contest_work.user == user or contest_work.likes.filter(user=user).exists(): - # if contest_work.likes.filter(user=user).exists(): - return Like() - like = Like.objects.create(user=user, ip=client_ip) - contest_work.likes.add(like) - return like + like = Like.objects.create(user=user, ip=client_ip) + return like def to_representation(self, instance): return LikeSerializer(instance, context=self.context).to_representation(instance) diff --git a/api/v1/serializers/school.py b/api/v1/serializers/school.py index 751bb6c2..4f8cd318 100644 --- a/api/v1/serializers/school.py +++ b/api/v1/serializers/school.py @@ -54,6 +54,8 @@ class SchoolScheduleSerializer(serializers.ModelSerializer): 'day_discount', 'start_at', 'schoolschedule_images', + 'cover', + 'trial_lesson', ) read_only_fields = ( @@ -96,6 +98,7 @@ class SchoolScheduleSerializerImg(serializers.ModelSerializer): child=GalleryImageSerializer(), required=False, ) + cover = ImageObjectSerializer() class Meta: model = SchoolSchedule @@ -111,6 +114,8 @@ class SchoolScheduleSerializerImg(serializers.ModelSerializer): 'day_discount', 'start_at', 'schoolschedule_images', + 'cover', + 'trial_lesson', ) read_only_fields = ( diff --git a/api/v1/serializers/user.py b/api/v1/serializers/user.py index 888806d0..bbb5e6b5 100644 --- a/api/v1/serializers/user.py +++ b/api/v1/serializers/user.py @@ -42,6 +42,7 @@ class UserSerializer(serializers.ModelSerializer): 'photo', 'balance', 'show_in_mainpage', + 'trial_lesson', ) read_only_fields = ( diff --git a/api/v1/views.py b/api/v1/views.py index 2089f123..63dc2ea1 100644 --- a/api/v1/views.py +++ b/api/v1/views.py @@ -131,6 +131,8 @@ class MaterialViewSet(ExtendedModelViewSet): class LikeViewSet(ExtendedModelViewSet): + OBJ_TYPE_CONTEST_WORK = 'contest_work' + queryset = Like.objects.select_related('user').all() serializer_class = LikeCreateSerializer serializer_class_map = { @@ -143,6 +145,28 @@ class LikeViewSet(ExtendedModelViewSet): # FIXME authentication_classes = [] + def create(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + obj_type = request.data.get('obj_type') + obj_id = request.data.get('obj_id') + user = serializer.validated_data.get('user') + if not user.is_active: # FIXME and user.is_authenticated): + return Response(status=status.HTTP_403_FORBIDDEN) + if obj_type == self.OBJ_TYPE_CONTEST_WORK: + contest_work = ContestWork.objects.get(pk=obj_id) + if contest_work.user == user: + return Response({'error': u'Нельзя голосовать за свою работу'}, status=status.HTTP_400_BAD_REQUEST) + if contest_work.likes.filter(user=user).exists(): + return Response({'error': u'Вы уже голосовали за эту работу'}, status=status.HTTP_400_BAD_REQUEST) + if contest_work.contest.finished: + return Response({'error': u'Голосование закончено'}, status=status.HTTP_400_BAD_REQUEST) + instance = serializer.save() + if obj_type == self.OBJ_TYPE_CONTEST_WORK: + contest_work.likes.add(instance) + headers = self.get_success_headers(serializer.data) + return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) + class CategoryViewSet(ExtendedModelViewSet): queryset = Category.objects.order_by('-id') diff --git a/apps/content/models.py b/apps/content/models.py index 197e1e7d..0c445958 100644 --- a/apps/content/models.py +++ b/apps/content/models.py @@ -1,7 +1,10 @@ +from datetime import datetime, time from urllib.parse import urlparse +from django.conf import settings from django.db import models from django.contrib.auth import get_user_model from django.urls import reverse_lazy +from django.utils import timezone from imagekit.models import ImageSpecField from imagekit.processors import ResizeToCover @@ -167,6 +170,11 @@ class Contest(models.Model): active = models.BooleanField(default=True) # TODO? baner + @property + def finished(self): + # FIXME + return datetime(2018, 8, 29, 21) < timezone.now() + def save(self, *args, **kwargs): if self.active: Contest.objects.filter(active=True).update(active=False) diff --git a/apps/content/templates/content/blocks/video.html b/apps/content/templates/content/blocks/video.html index fe741465..d9d9c47f 100644 --- a/apps/content/templates/content/blocks/video.html +++ b/apps/content/templates/content/blocks/video.html @@ -1,43 +1,43 @@ -
-
-
- {{ content.title }} -
-
- {% if 'youtube.com' in content.url or 'youtu.be' in content.url %} - - {% elif 'vimeo.com' in content.url %} - - {% endif %} -
-
-
- - \ No newline at end of file +
+
+
+ {{ content.title }} +
+
+ {% if 'youtube.com' in content.url or 'youtu.be' in content.url %} + + {% elif 'vimeo.com' in content.url %} + + {% endif %} +
+
+
+ + diff --git a/apps/content/templates/content/contest.html b/apps/content/templates/content/contest.html index f37f3886..9edbe8ec 100644 --- a/apps/content/templates/content/contest.html +++ b/apps/content/templates/content/contest.html @@ -12,7 +12,7 @@ {{ contest.description }}
- {% if not contest_work_uploaded %} + {% if not contest_work_uploaded and not contest.finished %} Загрузить свою работу @@ -34,7 +34,7 @@
Галерея
- {% if not contest_work_uploaded %} + {% if not contest_work_uploaded and not contest.finished %} Загрузить свою работу diff --git a/apps/content/templates/content/contest_work.html b/apps/content/templates/content/contest_work.html index 5184faae..e4ade33d 100644 --- a/apps/content/templates/content/contest_work.html +++ b/apps/content/templates/content/contest_work.html @@ -35,7 +35,7 @@
+ {% if user_liked %}:user-liked="true"{% endif %} likes="{{ likes_count }}">
diff --git a/apps/content/views.py b/apps/content/views.py index ff3a4deb..4d350cca 100644 --- a/apps/content/views.py +++ b/apps/content/views.py @@ -14,10 +14,11 @@ from apps.course.models import ContestWorkComment @method_decorator(login_required, name='dispatch') class ContestEditView(TemplateView): template_name = 'content/contest_edit.html' + query_pk_and_slug = True - def get(self, request, pk=None, lesson=None): - if pk: - self.object = get_object_or_404(Contest, pk=pk) + def get(self, request, slug=None, lesson=None): + if slug: + self.object = get_object_or_404(Contest, slug=slug) else: self.object = Contest() @@ -58,6 +59,7 @@ class ContestWorkView(DetailView): context['user_liked'] = self.object.likes.filter(user=self.request.user).exists() \ if self.request.user.is_authenticated else False + context['likes_count'] = self.object.likes.filter(user__is_active=True).count() return context diff --git a/apps/course/migrations/0043_auto_20180824_2132.py b/apps/course/migrations/0043_auto_20180824_2132.py new file mode 100644 index 00000000..9cf26b74 --- /dev/null +++ b/apps/course/migrations/0043_auto_20180824_2132.py @@ -0,0 +1,29 @@ +# Generated by Django 2.0.6 on 2018-08-24 21:32 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('course', '0042_like_ip'), + ] + + operations = [ + migrations.AlterField( + model_name='course', + name='cover', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='course_covers', to='content.ImageObject', verbose_name='Обложка курса'), + ), + migrations.AlterField( + model_name='lesson', + name='cover', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lesson_covers', to='content.ImageObject', verbose_name='Обложка урока'), + ), + migrations.AlterField( + model_name='material', + name='cover', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='material_covers', to='content.ImageObject', verbose_name='Обложка материала'), + ), + ] diff --git a/apps/course/models.py b/apps/course/models.py index dac438db..843e768e 100644 --- a/apps/course/models.py +++ b/apps/course/models.py @@ -65,7 +65,7 @@ class Course(BaseModel, DeactivatedMixin): ) cover = models.ForeignKey( ImageObject, related_name='course_covers', - verbose_name='Обложка курса', on_delete=models.CASCADE, + verbose_name='Обложка курса', on_delete=models.SET_NULL, null=True, blank=True, ) price = models.DecimalField( @@ -190,7 +190,7 @@ class Lesson(BaseModel, DeactivatedMixin): ) cover = models.ForeignKey( ImageObject, related_name='lesson_covers', - verbose_name='Обложка урока', on_delete=models.CASCADE, + verbose_name='Обложка урока', on_delete=models.SET_NULL, null=True, blank=True, ) created_at = models.DateTimeField(auto_now_add=True) @@ -222,7 +222,7 @@ class Material(models.Model): title = models.CharField('Название материала', max_length=100) cover = models.ForeignKey( ImageObject, related_name='material_covers', - verbose_name='Обложка материала', on_delete=models.CASCADE, + verbose_name='Обложка материала', on_delete=models.SET_NULL, null=True, blank=True, ) short_description = models.TextField('Краткое описание материала') diff --git a/apps/school/migrations/0019_schoolschedule_cover.py b/apps/school/migrations/0019_schoolschedule_cover.py new file mode 100644 index 00000000..88a3d222 --- /dev/null +++ b/apps/school/migrations/0019_schoolschedule_cover.py @@ -0,0 +1,20 @@ +# Generated by Django 2.0.6 on 2018-08-24 19:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('content', '0022_auto_20180815_2129'), + ('school', '0018_auto_20180629_1501'), + ] + + operations = [ + migrations.AddField( + model_name='schoolschedule', + name='cover', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='schoolschedule_cover', to='content.ImageObject', verbose_name='Обложка дня'), + ), + ] diff --git a/apps/school/migrations/0020_auto_20180824_2132.py b/apps/school/migrations/0020_auto_20180824_2132.py new file mode 100644 index 00000000..42188851 --- /dev/null +++ b/apps/school/migrations/0020_auto_20180824_2132.py @@ -0,0 +1,29 @@ +# Generated by Django 2.0.6 on 2018-08-24 21:32 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('school', '0019_schoolschedule_cover'), + ] + + operations = [ + migrations.AlterField( + model_name='livelesson', + name='cover', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='livelesson_covers', to='content.ImageObject', verbose_name='Обложка урока школы'), + ), + migrations.AlterField( + model_name='schoolschedule', + name='cover', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='schoolschedule_cover', to='content.ImageObject', verbose_name='Обложка дня'), + ), + migrations.AlterField( + model_name='schoolscheduleimage', + name='img', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='schoolschedule_images', to='content.ImageObject', verbose_name='Объект изображения'), + ), + ] diff --git a/apps/school/migrations/0021_schoolschedule_trial_lesson.py b/apps/school/migrations/0021_schoolschedule_trial_lesson.py new file mode 100644 index 00000000..293101a3 --- /dev/null +++ b/apps/school/migrations/0021_schoolschedule_trial_lesson.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.6 on 2018-08-27 21:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('school', '0020_auto_20180824_2132'), + ] + + operations = [ + migrations.AddField( + model_name='schoolschedule', + name='trial_lesson', + field=models.URLField(blank=True, default=''), + ), + ] diff --git a/apps/school/models.py b/apps/school/models.py index fe66564b..a059172f 100644 --- a/apps/school/models.py +++ b/apps/school/models.py @@ -38,6 +38,15 @@ class SchoolSchedule(models.Model): 'Скидка, в валюте', max_digits=8, decimal_places=2, default=0 ) start_at = models.TimeField('Начало урока', null=True) + cover = models.ForeignKey( + ImageObject, + related_name='schoolschedule_cover', + verbose_name='Обложка дня', + on_delete=models.SET_NULL, + null=True, + blank=True, + ) + trial_lesson = models.URLField(default='', blank=True) class Meta: ordering = ('weekday',) @@ -88,7 +97,7 @@ class SchoolScheduleImage(models.Model): ImageObject, related_name='schoolschedule_images', verbose_name='Объект изображения', - on_delete=models.CASCADE, + on_delete=models.SET_NULL, null=True, blank=True, ) @@ -111,7 +120,7 @@ class LiveLesson(BaseModel, DeactivatedMixin): ImageObject, related_name='livelesson_covers', verbose_name='Обложка урока школы', - on_delete=models.CASCADE, + on_delete=models.SET_NULL, null=True, blank=True, ) diff --git a/apps/school/templates/blocks/day_pay_btn.html b/apps/school/templates/blocks/day_pay_btn.html index 155b8827..f4cd2f40 100644 --- a/apps/school/templates/blocks/day_pay_btn.html +++ b/apps/school/templates/blocks/day_pay_btn.html @@ -1,7 +1,5 @@ купить diff --git a/apps/school/templates/blocks/schedule_item.html b/apps/school/templates/blocks/schedule_item.html index 7860e437..e4774339 100644 --- a/apps/school/templates/blocks/schedule_item.html +++ b/apps/school/templates/blocks/schedule_item.html @@ -1,21 +1,24 @@ {% load static %} {% load thumbnail %} -
+
{{ school_schedule }}
- {% if purchased and live_lesson %} + {% if is_purchased and live_lesson %}
{{ live_lesson.date }}
{% endif %}
{{ school_schedule.start_at }} (МСК)
- {% if purchased %} - {% if school_schedule.weekday in school_schedules_purchased %} - {% if live_lesson and live_lesson.title %} - {% include './open_lesson.html' %} - {% endif %} + {% if is_purchased %} + {% if school_schedule.weekday in school_schedules_purchased and live_lesson and live_lesson.title %} + {% include './open_lesson.html' %} {% endif %} + {% else %} + {% include './day_pay_btn.html' %} + {% endif %} + {% if school_schedule.trial_lesson %} + Пробный урок {% endif %}
@@ -32,7 +35,9 @@ {% thumbnail live_lesson.cover.image "70x70" crop="center" as im %} {% empty %} - + {% endthumbnail %}
diff --git a/apps/school/templates/summer/promo.html b/apps/school/templates/summer/promo.html index 6995c7b9..7878c9ef 100644 --- a/apps/school/templates/summer/promo.html +++ b/apps/school/templates/summer/promo.html @@ -5,16 +5,12 @@ Lil School — первая образовательная онлайн-платформа креативного мышления для детей
- Присоединяйтесь к школе с 1 сентября + Старт школы - 1 сентября
-
12 уроков
+
7 дисциплин
В разных техниках
diff --git a/apps/user/forms.py b/apps/user/forms.py index 2445d522..d20ee0ea 100644 --- a/apps/user/forms.py +++ b/apps/user/forms.py @@ -18,6 +18,7 @@ class UserEditForm(forms.ModelForm): # gender = forms.ChoiceField(choices=User.GENDER_CHOICES, required=False) gender = forms.CharField(required=False) # about = forms.CharField() + trial_lesson = forms.URLField(required=False) old_password = forms.CharField(required=False) new_password1 = forms.CharField(required=False) new_password2 = forms.CharField(required=False) @@ -41,6 +42,7 @@ class UserEditForm(forms.ModelForm): 'birthday', 'gender', 'about', + 'trial_lesson', 'old_password', 'new_password1', 'new_password2', diff --git a/apps/user/migrations/0023_user_trial_lesson.py b/apps/user/migrations/0023_user_trial_lesson.py new file mode 100644 index 00000000..33a0aab5 --- /dev/null +++ b/apps/user/migrations/0023_user_trial_lesson.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.6 on 2018-08-22 12:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('user', '0022_user_instagram_hashtag'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='trial_lesson', + field=models.URLField(blank=True, default='', null=True), + ), + ] diff --git a/apps/user/models.py b/apps/user/models.py index 230d99d1..1c070240 100644 --- a/apps/user/models.py +++ b/apps/user/models.py @@ -74,6 +74,7 @@ class User(AbstractUser): ) photo = models.ImageField('Фото', null=True, blank=True, upload_to='users') show_in_mainpage = models.BooleanField('Показывать на главной странице', default=False) + trial_lesson = models.URLField(default='', null=True, blank=True) objects = UserManager() diff --git a/apps/user/templates/user/profile-settings.html b/apps/user/templates/user/profile-settings.html index 5502c21d..90470b96 100644 --- a/apps/user/templates/user/profile-settings.html +++ b/apps/user/templates/user/profile-settings.html @@ -150,7 +150,18 @@ {% for error in form.about.errors %}
{{ error }}
{% endfor %} -
+ + {% if is_teacher %} +
+
Пробный урок
+
+ +
+ {% for error in form.trial_lesson.errors %} +
{{ error }}
+ {% endfor %} +
+ {% endif %}
Пароль
diff --git a/apps/user/views.py b/apps/user/views.py index ed9cc404..d7470fee 100644 --- a/apps/user/views.py +++ b/apps/user/views.py @@ -211,6 +211,11 @@ class ProfileEditView(UpdateView): self.object = self.get_object() return super().dispatch(request, *args, **kwargs) + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['is_teacher'] = self.object.role == User.TEACHER_ROLE + return context + def post(self, request, *args, **kwargs): # it's magic *-*-*-*-* if 'photo' in request.FILES: diff --git a/project/templates/blocks/about.html b/project/templates/blocks/about.html index 83c1810b..de379799 100644 --- a/project/templates/blocks/about.html +++ b/project/templates/blocks/about.html @@ -30,7 +30,7 @@
-
12 уроков
+
7 дисциплин
В разных техниках
@@ -43,20 +43,6 @@
Хранится 7 дней
-
- {% if not is_purchased and not is_purchased_future %} - - купить доступ от {{ min_school_price }} руб./месяц - - {% endif %} -
+
diff --git a/project/templates/blocks/comment.html b/project/templates/blocks/comment.html index be3234e9..d9e4822a 100644 --- a/project/templates/blocks/comment.html +++ b/project/templates/blocks/comment.html @@ -1,5 +1,5 @@ {% load static %} -{% if not node.deactivated_at %} +{% if not node.deactivated_at and node.author.is_active %}
{% if node.author.photo %} diff --git a/project/templates/blocks/lil_store_js.html b/project/templates/blocks/lil_store_js.html index cb5eb6f8..32da4573 100644 --- a/project/templates/blocks/lil_store_js.html +++ b/project/templates/blocks/lil_store_js.html @@ -4,7 +4,7 @@ staticUrl: '{% static "" %}', accessToken: '{{ request.user.auth_token }}', user: { - id: {{ request.user.id|default:'null' }}, + id: '{{ request.user.id|default:'' }}', } }; diff --git a/project/templates/blocks/partners.html b/project/templates/blocks/partners.html index 194daf54..ae1040c1 100644 --- a/project/templates/blocks/partners.html +++ b/project/templates/blocks/partners.html @@ -4,16 +4,30 @@
Наши партнеры
+
+ Скидка 15% по промокоду у наших партнеров +
- - - + + +
+
+
+
LIL
+
+
+
LILCITY
+
+
+
LILCITY
+
+
diff --git a/project/templates/blocks/popup_auth.html b/project/templates/blocks/popup_auth.html index 1a527a90..3e6c5c75 100644 --- a/project/templates/blocks/popup_auth.html +++ b/project/templates/blocks/popup_auth.html @@ -37,10 +37,10 @@
@@ -53,7 +53,7 @@
или
@@ -107,10 +107,10 @@
@@ -133,7 +133,7 @@
или
diff --git a/project/templates/blocks/popup_buy.html b/project/templates/blocks/popup_buy.html index 96b3b29d..0321b2ea 100644 --- a/project/templates/blocks/popup_buy.html +++ b/project/templates/blocks/popup_buy.html @@ -37,6 +37,11 @@ {% comment %} dont delete {% endcomment %} {{ school_schedule.title }} + + {% if school_schedule.trial_lesson %} + Пробный урок + {% endif %} + {{school_schedule.month_price}}р в мес. @@ -58,6 +63,11 @@ {% comment %} dont delete {% endcomment %} {{ school_schedule.title }} + + {% if school_schedule.trial_lesson %} + Пробный урок + {% endif %} + {{school_schedule.month_price}}р в мес. @@ -89,7 +99,7 @@
- ПЕРЕЙТИ К ОПЛАТЕ + ПЕРЕЙТИ К ОПЛАТЕ
diff --git a/project/templates/blocks/popup_subscribe.html b/project/templates/blocks/popup_subscribe.html index d78b324d..5e9921dc 100644 --- a/project/templates/blocks/popup_subscribe.html +++ b/project/templates/blocks/popup_subscribe.html @@ -10,20 +10,20 @@
-
+ {% csrf_token %}
-
+
ПОЧТА
-
- +
@@ -33,4 +33,4 @@
-
\ No newline at end of file + diff --git a/project/templates/blocks/promo.html b/project/templates/blocks/promo.html index fd000cba..f6f49349 100644 --- a/project/templates/blocks/promo.html +++ b/project/templates/blocks/promo.html @@ -46,27 +46,20 @@ {% else %}
- Приглашаем вас на месяц открытых дверей в Lil School + Приглашаем вас присоединиться к онлайн-школе с 1 сентября!
- {% comment %} {% if not is_purchased and not is_purchased_future %} - Получить доступ + купить доступ от {{ min_school_price }} руб./месяц + {% else %} + Подробнее {% endif %} - {% endcomment %} - Подробнее
{% endif %} diff --git a/project/templates/blocks/teachers.html b/project/templates/blocks/teachers.html index 2b251b33..492ca66d 100644 --- a/project/templates/blocks/teachers.html +++ b/project/templates/blocks/teachers.html @@ -17,10 +17,15 @@
- {{ teacher.get_full_name }}{% if teacher.instagram_hashtag %}, - - {{ teacher.instagram_hashtag }} - +
+ {{ teacher.get_full_name }}{% if teacher.instagram_hashtag %}, + + {{ teacher.instagram_hashtag }} + + {% endif %} +
+ {% if teacher.trial_lesson %} + ПРОБНЫЙ УРОК {% endif %}
@@ -30,13 +35,13 @@ - {% endif %} {% if teacher.instagram %} + {% endif %} {# if teacher.instagram #} - {% endif %} {% if teacher.twitter %} + {# endif #} {% if teacher.twitter %}