Merge remote-tracking branch 'origin/dev' into dev

remotes/origin/hasaccess
Vitaly Baev 8 years ago
commit ef6c1b5066
  1. 2
      api/v1/serializers/course.py
  2. 26
      api/v1/serializers/mixins.py
  3. 15
      apps/course/templates/course/_items.html
  4. 48
      apps/course/templates/course/course.html
  5. 13
      apps/course/templates/course/course_on_moderation.html
  6. 273
      apps/course/templates/course/course_only_lessons.html
  7. 16
      apps/course/templates/course/lesson.html
  8. 24
      apps/course/views.py
  9. 2
      apps/user/forms.py
  10. 1
      apps/user/templates/user/profile-settings.html
  11. 20
      apps/user/templates/user/profile.html
  12. 4
      apps/user/views.py
  13. 12
      project/urls.py
  14. 3
      web/src/sass/_common.sass

@ -142,7 +142,7 @@ class CourseCreateSerializer(DispatchContentMixin,
materials = validated_data.pop('materials', [])
gallery = validated_data.pop('gallery', {})
author = validated_data.get('author', None)
if not instance.author or not author:
if not instance.author or author and instance.author != author:
validated_data['author'] = self.context['request'].user
course = super().update(instance, validated_data)
self.dispatch_materials(course, materials)

@ -85,10 +85,15 @@ class DispatchContentMixin(object):
g.save()
if 'images' in cdata:
for image in cdata['images']:
gi = GalleryImage.objects.create(
gallery=g,
img=ImageObject.objects.get(id=image['img'])
)
if 'id' in image and image['id']:
gi = GalleryImage.objects.get(id=image['id'])
gi.img = ImageObject.objects.get(id=image['img'])
gi.save()
else:
gi = GalleryImage.objects.create(
gallery=g,
img=ImageObject.objects.get(id=image['img'])
)
else:
g = Gallery.objects.create(
course=course,
@ -97,10 +102,15 @@ class DispatchContentMixin(object):
)
if 'images' in cdata:
for image in cdata['images']:
gi = GalleryImage.objects.create(
gallery=g,
img=ImageObject.objects.get(id=image['img']),
)
if 'id' in image and image['id']:
gi = GalleryImage.objects.get(id=image['id'])
gi.img = ImageObject.objects.get(id=image['img'])
gi.save()
else:
gi = GalleryImage.objects.create(
gallery=g,
img=ImageObject.objects.get(id=image['img'])
)
class DispatchMaterialMixin(object):

@ -8,9 +8,9 @@
>
<a class="courses__preview" href="{% url 'course' course.id %}?next={{ request.get_full_path }}">
{% if course.cover %}
<img class="courses__pic" src="{{ course.cover.image.url }}"/>
<img width="300px" height="170px" class="courses__pic" src="{{ course.cover.image.url }}"/>
{% else %}
<img class="courses__pic" src="{% static 'img/no_cover.png' %}"/>
<img width="300px" height="170px" class="courses__pic" src="{% static 'img/no_cover.png' %}"/>
{% endif %}
<div class="courses__view">Подробнее</div>
{% if course.is_featured %}
@ -22,6 +22,17 @@
</div>
<div class="courses__label courses__label_clock"></div>
{% endif %}
{% if course.status == 1 %}
<div class="courses__soon">
<div class="courses__time">КУРС ПРОХОДИТ МОДЕРАЦИЮ</div>
</div>
<div class="courses__label courses__label_eye"></div>
{% elif course.status == 0 %}
<div class="courses__soon">
<div class="courses__time">ЧЕРНОВИК</div>
</div>
<div class="courses__label courses__label_draft"></div>
{% endif %}
</a>
<div class="courses__details">
<a class="courses__theme theme {{ theme_color }}"

@ -131,15 +131,25 @@
</div>
</div>
<div class="course__actions">
<button class="course__action btn btn_lg btn_stroke">Описание курса</button>
<a href="{% url 'course' course.id %}" class="course__action btn btn_lg btn_stroke">Описание курса</a>
{% if request.user.role == request.user.AUTHOR_ROLE or request.user.role == request.user.ADMIN_ROLE %}
<a href="{% url 'course-only-lessons' course.id %}"
class="course__action btn btn_lg btn_gray"
{% if not user.is_authenticated %}data-popup=".js-popup-auth"{% endif %}
>УРОКИ
{% comment %} <svg class="icon icon-lock">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-lock"></use>
</svg> {% endcomment %}
</a>
{% else %}
<button
class="course__action btn btn_lg btn_gray"
{% if not user.is_authenticated %}data-popup=".js-popup-auth"{% endif %}
>УРОКИ
<svg class="icon icon-lock">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-lock"></use>
</svg>
class="course__action btn btn_lg btn_gray"
>УРОКИ
<svg class="icon icon-lock">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-lock"></use>
</svg>
</button>
{% endif %}
</div>
<a class="course__video video" href="#">
{% if course.cover %}
@ -153,9 +163,9 @@
<div class="video__time">{{ course.deferred_start_at_humanize }}</div>
</div>
{% else %}
<svg class="icon icon-play">
{% comment %} <svg class="icon icon-play">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-play"></use>
</svg>
</svg> {% endcomment %}
{% endif %}
</a>
@ -231,11 +241,15 @@
<div class="lessons__title title">Содержание курса</div>
<div class="lessons__list">
{% for lesson in course.lessons.all %}
<a href="{% if request.user.role == request.user.AUTHOR_ROLE or request.user.role == request.user.ADMIN_ROLE %}{% url 'lesson' pk=lesson.id %}{% else %}#{% endif %}">
{% if request.user.role == request.user.AUTHOR_ROLE or request.user.role == request.user.ADMIN_ROLE %}
<a href="{% url 'lesson' pk=lesson.id %}?next={{ request.get_full_path }}">
{% else %}
<div>
{% endif %}
<div class="lessons__item">
<div class="lessons__subtitle subtitle">{{ lesson.title }}</div>
<div class="lessons__row">
{% if lesson.cover %}
{% comment %} {% if lesson.cover %}
<div class="lessons__preview">
<img class="lessons__pic" src="{{ lesson.cover.url }}">
</div>
@ -243,11 +257,15 @@
<div class="lessons__preview">
<img class="lessons__pic" src="{% static 'img/pic-3.jpg' %}">
</div>
{% endif %}
{% endif %} {% endcomment %}
<div class="lessons__content">{{ lesson.short_description | safe }}</div>
</div>
</div>
</a>
{% if request.user.role == request.user.AUTHOR_ROLE or request.user.role == request.user.ADMIN_ROLE %}
<a href="{% url 'lesson' pk=lesson.id %}">
{% else %}
<div>
{% endif %}
{% endfor %}
</div>
{% comment %} <div class="lessons__load load">
@ -317,8 +335,8 @@
</div>
</a>
</div>
<div class="course__title title">Как просто научиться рисовать простых персонажей.</div>
<div class="course__content">Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.</div>
<div class="course__title title">{{ course.title }}</div>
<div class="course__content">{{ course.short_description }}</div>
<a href="{% url 'user' course.author.id %}">
<div class="course__user user user_white">
{% if course.author.photo %}

@ -0,0 +1,13 @@
{% extends "templates/lilcity/index.html" %}
{% load static %}
{% block content %}
<div class="section">
<div class="section__center center center_xs">
<div class="done">
<div class="done__title title">Ваш курс отправлен на модерацию!</div>
<div class="done__foot"><a href="/" class="btn btn_stroke">ПЕРЕЙТИ К ГЛАВНОЙ</a></div>
</div>
</div>
</div>
{% endblock content %}

@ -0,0 +1,273 @@
{% extends "templates/lilcity/index.html" %}
{% load static %}
{% load data_liked from data_liked %}
{% load rupluralize from plural %}
{% block title %}{{ course.title }} - {{ block.super }}{% endblock title %}
{% comment %} seo tags {% endcomment %}
{% block description %}{{ course.short_description }}{% endblock description%}
{% block twurl %}{{ request.build_absolute_uri }}{% endblock twurl %}
{% block ogtitle %}{{ course.title }} - {{ block.super }}{% endblock ogtitle %}
{% block ogurl %}{{ request.build_absolute_uri }}{% endblock ogurl %}
{% if course.cover %}
{% block ogimage %}{{ request.build_absolute_uri }}{{ course.cover.url }}{% endblock ogimage %}
{% endif %}
{% block ogdescription %}{{ course.short_description }}{% endblock ogdescription %}
{% block content %}
<div class="section section_border">
<div class="section__center center center_sm">
<div class="go">
<a class="go__item" href="{% if next %}{{next}}{% else %}{% url 'courses' %}{% endif %}">
<div class="go__arrow">
<svg class="icon icon-arrow-left">
<use xlink:href="{% static '/img/sprite.svg' %}#icon-arrow-left"></use>
</svg>
</div>
<div class="go__title">Вернуться</div>
</a>
<button
class="go__btn btn btn_md"
{% if user.is_authenticated %}
data-popup=".js-popup-buy"
{% else %}
data-popup=".js-popup-auth"
{% endif %}
>КУПИТЬ КУРС</button>
</div>
<div
class="course"
data-course data-course-id={{ course.id }}
data-likes-count={{ course.likes.count }}
>
<div class="course__head">
<div class="course__theme theme theme_green">{{ course.category.title | upper }}</div>
{% data_liked user course as liked %}
<a
class="course__likes likes{% if liked %} active{% endif %}"
{% if not user.is_authenticated %}data-popup=".js-popup-auth"{% endif %}
data-course-likes
{% if liked %} data-liked=1 {% else %} data-liked=0 {% endif %}
data-course-likes-count="{{ course.likes.count }}"
data-course-id="{{ course.id }}"
href="#"
>
<div class="likes__counter">{{ course.likes.count }}</div>
<div class="likes__icon">
<svg class="icon icon-like-bold">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-like-bold"></use>
</svg>
<svg class="icon icon-like-fill-bold">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-like-fill-bold"></use>
</svg>
</div>
</a>
</div>
<div class="course__title title">{{ course.title }}</div>
<div class="course__content">{{ course.short_description }}</div>
<a href="{% url 'user' course.author.id %}">
<div class="course__user user">
{% if course.author.photo %}
<div class="user__ava ava">
<img class="ava__pic" src="{{ course.author.photo.url }}">
</div>
{% else %}
<div class="user__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}">
</div>
{% endif %}
<div class="user__info">
<div class="user__name">{{ course.author.get_full_name }}</div>
<div class="user__meta">
<div class="user__date">{{ course.created_at_humanize }}</div>
</div>
</div>
</div>
</a>
<div class="course__metas">
<div class="course__meta meta">
<div class="meta__item">
<div class="meta__icon">
<svg class="icon icon-time">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-time"></use>
</svg>
</div>
<div class="meta__title">{{ course.duration | rupluralize:"день,дня,дней" }}</div>
</div>
<div class="meta__item">
<div class="meta__icon">
<svg class="icon icon-date">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-date"></use>
</svg>
</div>
<div class="meta__title">{{ course.created_at | date:"d F Yг." }}</div>
</div>
<div class="meta__item">
<div class="meta__icon">
<svg class="icon icon-money">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-money"></use>
</svg>
</div>
<div class="meta__title">{{ course.price|floatformat:"-2" }}₽</div>
</div>
</div>
<div class="course__meta meta">
<div class="meta__item">
<div class="meta__icon">
<svg class="icon icon-showcase">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-showcase"></use>
</svg>
</div>
<div class="meta__title">{{ course.lessons.count | rupluralize:"урок,урока,уроков" }}</div>
</div>
<div class="meta__item">
<div class="meta__icon">
<svg class="icon icon-video">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-video"></use>
</svg>
</div>
<div class="meta__title">{{ course.count_videos_in_lessons }} видео</div>
</div>
</div>
</div>
<div class="course__actions">
<a href="{% url 'course' course.id %}" class="course__action btn btn_lg btn_gray">Описание курса</a>
<a href="{% url 'course-only-lessons' course.id %}"
class="course__action btn btn_lg btn_stroke"
{% if not user.is_authenticated %}data-popup=".js-popup-auth"{% endif %}
>УРОКИ
{% comment %} <svg class="icon icon-lock">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-lock"></use>
</svg> {% endcomment %}
</a>
</div>
</div>
</div>
{% if user.is_authenticated and course.lessons.exists %}
<div class="section">
<div class="section__center center center_sm">
<div class="lessons">
<div class="lessons__title title">Содержание курса</div>
<div class="lessons__list">
{% for lesson in course.lessons.all %}
<a href="{% if request.user.role == request.user.AUTHOR_ROLE or request.user.role == request.user.ADMIN_ROLE %}{% url 'lesson' pk=lesson.id %}{% else %}#{% endif %}">
<div class="lessons__item">
<div class="lessons__subtitle subtitle">{{ lesson.title }}</div>
<div class="lessons__row">
{% if lesson.cover %}
<div class="lessons__preview">
<img class="lessons__pic" src="{{ lesson.cover.url }}">
</div>
{% else %}
<div class="lessons__preview">
<img class="lessons__pic" src="{% static 'img/pic-3.jpg' %}">
</div>
{% endif %}
<div class="lessons__content">{{ lesson.short_description | safe }}</div>
</div>
</div>
</a>
{% endfor %}
</div>
{% comment %} <div class="lessons__load load">
<button class="load__btn btn">еще</button>
</div> {% endcomment %}
</div>
</div>
</div>
{% comment %} <div class="section">
<div class="section__center center center_sm">
<div class="title">Материалы, которые понадобятся</div>
<div class="materials">
{% for material in course.materials.all %}
<div class="materials__item">
{% if material.cover %}
<div class="materials__preview">
<img class="materials__pic" src="{{ material.cover.url }}">
</div>
{% else %}
<div class="materials__preview">
<img class="materials__pic" src="{% static 'img/pic-3.jpg' %}">
</div>
{% endif %}
<div class="materials__wrap">
<div class="materials__title">{{ material.title }}</div>
<div class="materials__content">{{ material.short_description }}</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div> {% endcomment %}
{% endif %}
{% if course.gallery %}
<div class="section section_gradient">
<div class="section__center center center_sm">
{% include "course/content/gallery.html" with results=True %}
</div>
</div>
{% endif %}
<div class="section section_gray">
<div class="section__center center center_sm">
<div class="title">Задавайте вопросы:</div>
<div class="questions">
{% if user.is_authenticated %}
<form class="questions__form" method="post" action="{% url 'coursecomment' course_id=course.id %}">
<input type="hidden" name="reply_id">
<div class="questions__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}">
</div>
<div class="questions__wrap">
<div class="questions__reply-info">В ответ на
<a href="" class="questions__reply-anchor">этот комментарий</a>.
<a href="#" class="questions__reply-cancel grey-link">Отменить</a>
</div>
<div class="questions__field">
<textarea class="questions__textarea" placeholder="Спросите автора курса интересующие вас вопросы"></textarea>
</div>
<button class="questions__btn btn btn_light">ОТПРАВИТЬ</button>
</div>
</form>
{% else %}
<div>Только зарегистрированные пользователи могут оставлять комментарии.</div>
{% endif %}
<div class="questions__list">
{% include "./blocks/comments.html" with object=course %}
</div>
</div>
</div>
</div>
<div class="section">
<div class="section__center center center_sm">
<div class="share">
<div class="share__title">Поделиться курсом</div>
<div class="share__list likely">
<!--<a class="share__item vkontakte" href="#">-->
<!--<svg class="icon icon-share-facebook">-->
<!--<use xlink:href="{% static 'img/sprite.svg' %}#icon-share-vkontakte"></use>-->
<!--</svg>-->
<!--</a>-->
<a class="share__item facebook" href="#">
<svg class="icon icon-share-facebook">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-share-facebook"></use>
</svg>
</a>
<a class="share__item twitter" href="#">
<svg class="icon icon-share-twitter">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-share-twitter"></use>
</svg>
</a>
<a class="share__item gplus" href="#">
<svg class="icon icon-share-google">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-share-google"></use>
</svg>
</a>
<a class="share__item pinterest" href="#">
<svg class="icon icon-share-pinterest">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-share-pinterest"></use>
</svg>
</a>
</div>
</div>
</div>
</div>
{% endblock content %}

@ -6,7 +6,7 @@
<div class="section">
<div class="section__center center center_sm">
<div class="go">
<a class="go__item" href="{% url 'course' lesson.course.id %}">
<a class="go__item" href="{% if next %}{{next}}{% else %}{% url 'course' lesson.course.id %}{% endif %}">
<div class="go__arrow">
<svg class="icon icon-arrow-left">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-arrow-left"></use>
@ -14,7 +14,8 @@
</div>
<div class="go__title">Вернуться к&nbsp;списку уроков</div>
</a>
<a class="go__item" href="#">
{% comment %} {% if next_lesson %}
<a class="go__item" href="{{ next_lesson }}">
<div class="go__title">Перейти к&nbsp;следующему уроку</div>
<div class="go__arrow">
<svg class="icon icon-arrow-right">
@ -22,16 +23,21 @@
</svg>
</div>
</a>
{% endif %} {% endcomment %}
</div>
<div class="lesson">
<div class="lesson__subtitle subtitle">{{ lesson.title }}</div>
<div class="lesson__content">{{ lesson.short_description }}</div>
<a class="lesson__video video" href="#">
<img class="video__pic" src="{% static 'img/video-1.jpg' %}">
{% comment %} <a class="lesson__video video" href="#">
{% if lesson.cover %}
<img class="video__pic" src="{{ lesson.cover.image.url }}"/>
{% else %}
<img class="video__pic" src="{% static 'img/no_cover.png' %}"/>
{% endif %}
<svg class="icon icon-play">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-play"></use>
</svg>
</a>
</a> {% endcomment %}
</div>
</div>
</div>

@ -141,12 +141,19 @@ def lessoncomment(request, lesson_id):
})
@method_decorator(login_required, name='dispatch')
class CourseOnModerationView(TemplateView):
template_name = 'course/course_on_moderation.html'
@method_decorator(login_required, name='dispatch')
class CourseEditView(TemplateView):
template_name = 'course/course_edit.html'
def get(self, request, pk=None):
drafts = Course.objects.filter(author=request.user, status=Course.DRAFT)
drafts = Course.objects.filter(
author=request.user, status=Course.DRAFT
)
if pk:
self.object = get_object_or_404(Course, pk=pk)
elif drafts.exists():
@ -162,7 +169,7 @@ class CourseEditView(TemplateView):
return context
@method_decorator(login_required, name='dispatch')
# @method_decorator(login_required, name='dispatch')
class CourseView(DetailView):
model = Course
context_object_name = 'course'
@ -170,12 +177,13 @@ class CourseView(DetailView):
def get(self, request, *args, **kwargs):
response = super().get(request, *args, **kwargs)
if (self.object.status != Course.PUBLISHED and
(request.user.role not in [User.AUTHOR_ROLE, User.ADMIN_ROLE] or
self.object.author != request.user)):
if (not request.user.is_authenticated and self.object.status != Course.PUBLISHED):
raise Http404
return response
# ((self.object.status != Course.PUBLISHED and request.user.role != User.ADMIN_ROLE) or
# (self.object.status != Course.PUBLISHED and request.user.role != User.AUTHOR_ROLE and self.object.author != request.user)):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['next'] = self.request.GET.get('next', None)
@ -259,6 +267,12 @@ class LessonView(DetailView):
raise Http404
return response
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['next'] = self.request.GET.get('next', None)
context['next_lesson'] = self.request.GET.get('next_lesson', None)
return context
class SearchView(CoursesView):
template_name = 'course/result.html'

@ -10,7 +10,7 @@ class UserEditForm(forms.ModelForm):
# email = forms.CharField()
# city = forms.CharField()
# country = forms.CharField()
birthday = forms.DateField(input_formats=['%d.%m.%Y'])
birthday = forms.DateField(input_formats=['%d.%m.%Y'], required=False)
# gender = forms.ChoiceField(choices=User.GENDER_CHOICES, required=False)
gender = forms.CharField(required=False)
# about = forms.CharField()

@ -31,7 +31,6 @@
</div>
</div>
{% endif %}
{{form.errors}}
<div class="section section_gray">
<div class="section__center center center_xs">
<div class="form">

@ -17,31 +17,31 @@
<div class="profile__share share share_sm">
<div class="share__list">
{% if user.facebook %}
<a class="share__item" href="#">
<a class="share__item" href="{{ user.facebook }}">
<svg class="icon icon-share-facebook">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-share-facebook"></use>
</svg>
</a>
{% endif %} {% if user.instagram %}
<a class="share__item" href="#">
<a class="share__item" href="{{ user.instagram }}">
<svg class="icon icon-share-instagram">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-share-instagram"></use>
</svg>
</a>
{% endif %} {% if user.twitter %}
<a class="share__item" href="#">
<a class="share__item" href="{{ user.twitter }}">
<svg class="icon icon-share-twitter">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-share-twitter"></use>
</svg>
</a>
{% endif %} {% if user.google %}
<a class="share__item" href="#">
<a class="share__item" href="{{ user.google }}">
<svg class="icon icon-share-google">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-share-google"></use>
</svg>
</a>
{% endif %} {% if user.pinterest %}
<a class="share__item" href="#">
<a class="share__item" href="{{ user.pinterest }}">
<svg class="icon icon-share-pinterest">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-share-pinterest"></use>
</svg>
@ -51,7 +51,9 @@
</div>
</div>
<div class="profile__content">
{% if user.about %}
{{ user.about }}
{% endif %}
</div>
<div class="profile__foot">
<a class="profile__btn btn" href="#">Изменить</a>
@ -69,13 +71,13 @@
<button class="tabs__btn js-tabs-btn active">ОПУБЛИКОВАННЫЕ
<span class="mobile-hide">КУРСЫ</span>
</button>
<button class="tabs__btn js-tabs-btn">
{% comment %} <button class="tabs__btn js-tabs-btn">
<span class="mobile-hide">КУРСЫ</span>
НА МОДЕРАЦИИ
</button>
<button class="tabs__btn js-tabs-btn">ЧЕРНОВИК
<span class="mobile-hide">КУРСА</span>
</button>
</button> {% endcomment %}
</div>
<div class="tabs__container">
<div class="tabs__item js-tabs-item">
@ -92,7 +94,7 @@
</div>
</div>
</div>
<div class="tabs__item js-tabs-item">
{% comment %} <div class="tabs__item js-tabs-item">
<div class="courses courses_scroll">
<div class="courses__list">
{% include "course/course_items.html" with course_items=pending %}
@ -105,7 +107,7 @@
{% include "course/course_items.html" with course_items=drafts %}
</div>
</div>
</div>
</div> {% endcomment %}
</div>
</div>
</div>

@ -37,7 +37,7 @@ class UserView(DetailView):
def get_context_data(self, object):
context = super().get_context_data()
context['published'] = Course.objects.filter(
author=self.object, status=Course.PUBLISHED
author=self.object,
)
context['pending'] = Course.objects.filter(
author=self.object, status=Course.PENDING
@ -117,4 +117,4 @@ class UserEditView(UpdateView):
return super().post(request, *args, **kwargs)
def get_success_url(self):
return reverse('user-edit', args=[self.object.id])
return reverse('user-edit-profile', args=[self.object.id])

@ -22,19 +22,25 @@ from apps.course.views import (
CoursesView, likes, coursecomment,
CourseView, LessonView, SearchView,
lessoncomment, CourseEditView,
CourseOnModerationView,
)
from apps.course.models import Course
from apps.user.views import UserView, UserEditView, NotificationEditView, PaymentHistoryView, resend_email_verify
from apps.user.views import (
UserView, UserEditView, NotificationEditView,
PaymentHistoryView, resend_email_verify,
)
urlpatterns = [
path('admin/', admin.site.urls),
path('auth/', include(('apps.auth.urls', 'lilcity'))),
path('courses/', CoursesView.as_view(), name='courses'),
path('course/create', CourseEditView.as_view(), name='course_create'),
path('course/on-moderation', CourseOnModerationView.as_view(), name='course-on-moderation'),
path('course/<int:pk>/', CourseView.as_view(), name='course'),
path('course/<str:slug>/', CourseView.as_view(), name='course'),
path('course/<int:course_id>/like', likes, name='likes'),
path('course/create', CourseEditView.as_view(), name='course_create'),
path('course/<int:pk>/edit', CourseEditView.as_view(), name='course_edit'),
path('course/<int:pk>/lessons', CourseView.as_view(template_name='course/course_only_lessons.html'), name='course-only-lessons'),
path('course/<int:course_id>/like', likes, name='likes'),
path('course/<int:course_id>/comment', coursecomment, name='coursecomment'),
path('lesson/<int:pk>/', LessonView.as_view(), name='lesson'),
path('lesson/<int:lesson_id>/comment', lessoncomment, name='lessoncomment'),

@ -334,6 +334,7 @@ a.btn
padding: 10px 15px
background: white
&__status
width: 100px
margin-right: 5px
+fb
font-size: 12px
@ -2757,6 +2758,8 @@ a.grey-link
height: 56px
margin-bottom: 40px
border-bottom: 1px solid $border
align-items: center;
justify-content: center;
+m
margin: 0 -15px 30px
&__btn

Loading…
Cancel
Save