diff --git a/courses/apps.py b/courses/apps.py index 019ba91..89f1ba2 100644 --- a/courses/apps.py +++ b/courses/apps.py @@ -3,4 +3,4 @@ from django.apps import AppConfig class CoursesConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'courses' + name = 'courses' \ No newline at end of file diff --git a/courses/urls.py b/courses/urls.py index 11c4623..96c573e 100644 --- a/courses/urls.py +++ b/courses/urls.py @@ -3,7 +3,7 @@ from . import views app_name = 'courses' urlpatterns = [ - path('', views.list, name='list'), + path('', views.list_courses, name='list'), # Lesson detail: /courses//// path('///', views.lesson_detail, name='lesson_detail'), path('-/', views.show, name="show"), diff --git a/courses/views.py b/courses/views.py index 37131cb..8a33bbb 100644 --- a/courses/views.py +++ b/courses/views.py @@ -5,7 +5,7 @@ from django.db.models import Prefetch from .models import Course, Lesson, Module, Comment from .forms import CommentForm -def list(request): +def list_courses(request): courses = Course.objects.all() return render(request, 'courses/list.html', {'courses': courses}) @@ -82,6 +82,20 @@ def lesson_detail(request, course_slug, module_slug, lesson_slug): .order_by('order') ) + # Compute previous and next lessons within the ordered course lessons + prev_lesson = None + next_lesson = None + try: + ids = list(lessons.values_list('id', flat=True)) + idx = ids.index(lesson.id) + if idx > 0: + prev_lesson = next(l for l in lessons if l.id == ids[idx - 1]) + if idx < len(ids) - 1: + next_lesson = next(l for l in lessons if l.id == ids[idx + 1]) + except ValueError: + # current lesson not in list — keep prev/next as None + pass + # Public comments for the current lesson (top-level) and their replies replies_qs = Comment.objects.filter(is_active=True).select_related('user').order_by('created_at') comments = ( @@ -98,5 +112,7 @@ def lesson_detail(request, course_slug, module_slug, lesson_slug): 'lessons': lessons, 'comments': comments, 'comment_form': form, + 'prev_lesson': prev_lesson, + 'next_lesson': next_lesson, } return render(request, 'courses/lesson.html', context) \ No newline at end of file diff --git a/devart/settings.py b/devart/settings.py index 103e5ea..1ba3e94 100644 --- a/devart/settings.py +++ b/devart/settings.py @@ -71,7 +71,6 @@ TEMPLATES = [ 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ - 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', diff --git a/templates/courses/partials/_course_toc.html b/templates/courses/partials/_course_toc.html index 6d740c8..ff400b2 100644 --- a/templates/courses/partials/_course_toc.html +++ b/templates/courses/partials/_course_toc.html @@ -21,6 +21,26 @@ {% if lesson.video_id %} {% if not lesson.is_premium %}
+
+
+ {% if prev_lesson %} + + ← Vidéo précédente + + {% else %} + ← Vidéo précédente + {% endif %} +
+
+ {% if next_lesson %} + + Vidéo suivante → + + {% else %} + Vidéo suivante → + {% endif %} +
+
{% else %} {% if not user.profile.is_premium %}
@@ -47,7 +67,6 @@ {% endif %} {% endif %} {{ lesson.content|safe }} -

Commentaires

{% if comments %} @@ -229,8 +248,9 @@ }); })(); -
-
+ + + {% endif %} {% endfor %}