Affichage de la progression utilisateur dans les cours suivis et amélioration des templates associés.

This commit is contained in:
mrtoine 2025-12-16 13:55:14 +01:00
parent 81b42b8b4a
commit 8f0fad45be
4 changed files with 65 additions and 29 deletions

View file

@ -12,7 +12,7 @@ class CourseSitemap(sitemaps.Sitemap):
priority = 0.9
def items(self):
return Course.objects.filter(enable=True) # Exemple de filtre
return Course.objects.filter(enable=True).order_by('id')
def location(self, item):
# Assure-toi que ton modèle Course a bien une méthode get_absolute_url

View file

@ -6,12 +6,27 @@
{% endblock %}
<div class="profile-details">
<h2>Mes cours</h2>
<p>Retrouvez ici la liste de tous les cours que vous suivez.</p>
<ul>
{% for course in user_courses %}
<li><a href="{% url 'courses:show' course.name|slugify course.id %}">{{ course.name }}</a></li>
{% endfor %}
</ul>
<p>Retrouvez ici la liste de tous les cours que vous suivez et votre progression.</p>
{% if progress_list %}
<ul class="profile-courses">
{% for p in progress_list %}
{% with course=p.course %}
<li>
<a href="{% url 'courses:show' course.name|slugify course.id %}">
{% if course.thumbnail %}
<img src="/{{ course.thumbnail }}" alt="{{ course.name }}" class="course-thumb-mini">
{% endif %}
<span>{{ course.name }}</span>
</a>
<div class="muted small">Progression: {{ p.percent_completed }}%</div>
</li>
{% endwith %}
{% endfor %}
</ul>
{% else %}
<p class="muted">Vous ne suivez aucun cours pour le moment.</p>
{% endif %}
</div>
</section>
{% endblock %}

View file

@ -22,24 +22,27 @@
<div class="profile-card">
<h3>Mes cours</h3>
{% with courses=user.course_set.all %}
{% if courses %}
<ul class="profile-courses">
{% for course in courses|slice:":6" %}
<li>
<a href="{% url 'courses:show' course_id=course.id course_name=course.slug %}">
<img src="/{{ course.thumbnail }}" alt="{{ course.name }}" class="course-thumb-mini">
<span>{{ course.name }}</span>
</a>
</li>
{% endfor %}
</ul>
<div class="text-right">
<a class="btn btn-secondary btn-sm" href="{% url 'user_courses' %}">Voir tous mes cours</a>
</div>
{% else %}
<p class="muted">Aucun cours suivi pour le moment.</p>
{% endif %}
{% with progress_list=latest_progress %}
{% if progress_list %}
<ul class="profile-courses">
{% for p in progress_list %}
{% with course=p.course %}
<li>
<a href="{% url 'courses:show' course_id=course.id course_name=course.slug %}">
<img src="/{{ course.thumbnail }}" alt="{{ course.name }}" class="course-thumb-mini">
<span>{{ course.name }}</span>
</a>
<div class="muted small">Progression: {{ p.percent_completed }}%</div>
</li>
{% endwith %}
{% endfor %}
</ul>
<div class="text-right">
<a class="btn btn-secondary btn-sm" href="{% url 'user_courses' %}">Voir tous mes cours</a>
</div>
{% else %}
<p class="muted">Aucun cours suivi pour le moment.</p>
{% endif %}
{% endwith %}
</div>

View file

@ -3,6 +3,7 @@ from django.contrib import messages
from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout
from django.contrib.auth.models import User
from courses.models import Course
from progression.models import Progression
from .forms import UserRegistrationForm, UserLoginForm, UserUpdateForm, ProfileUpdateForm, CompleteProfileForm
from django.contrib.auth.decorators import login_required
from django.core.mail import send_mail
@ -81,7 +82,17 @@ def logout(request):
def profile(request):
if not hasattr(request.user, 'profile'):
return redirect('complete_profile')
return render(request, 'users/profile.html')
latest_progress = (
Progression.objects
.filter(user=request.user)
.select_related('course')
.prefetch_related('completed_lessons')
.order_by('-updated_at')[:5]
)
# Affiche les 5 derniers cours regardés avec leur progression
return render(request, 'users/profile.html', {'latest_progress': latest_progress})
@login_required(login_url='login')
def complete_profile(request):
@ -130,9 +141,16 @@ def account_update(request):
@login_required(login_url='login')
def my_courses(request):
user_courses = Course.objects.filter(author=request.user.id)
print(user_courses)
return render(request, 'users/my_courses.html', {'user_courses' : user_courses})
# Liste tous les cours suivis par l'utilisateur avec leur progression
progress_list = (
Progression.objects
.filter(user=request.user)
.select_related('course')
.prefetch_related('completed_lessons')
.order_by('-updated_at')
)
return render(request, 'users/my_courses.html', {'progress_list': progress_list})
def create_post(request):
# Implement post creation logic here