Files
portfolio-django/projects/views.py

98 lines
2.7 KiB
Python
Raw Normal View History

2026-03-31 13:10:16 +02:00
"""
Vues principales du portfolio.
Toutes les données viennent de :
- data/projects.json projets
- data/config.json profil, compétences, contact, footer, SEO...
"""
from django.shortcuts import render
from django.http import Http404
from .utils import (
load_config,
load_projects,
get_project_by_slug,
get_all_categories,
get_all_technologies,
filter_projects,
)
def loutre(request):
"""Page surprise ❤️"""
return render(request, 'loutre.html')
def cv(request):
"""Page visionneuse CV"""
return render(request, 'cv.html')
def _base_context():
"""
Retourne le contexte de base commun à toutes les pages
(config complète du site + total projets).
"""
config = load_config()
all_projects = load_projects()
return config, {
'config': config,
'total_projects': len(all_projects),
}
def home(request):
"""
Page d'accueil : hero section + compétences + aperçu des projets.
"""
config, context = _base_context()
all_projects = load_projects()
context.update({
'featured_projects': all_projects[:3],
'all_techs': get_all_technologies(all_projects),
})
return render(request, 'home.html', context)
def project_list(request):
"""
Page liste des projets avec filtres par catégorie et technologie.
"""
config, context = _base_context()
all_projects = load_projects()
selected_category = request.GET.get('category', '').strip()
selected_tech = request.GET.get('tech', '').strip()
projects = filter_projects(all_projects, category=selected_category, tech=selected_tech)
context.update({
'projects': projects,
'categories': get_all_categories(all_projects),
'technologies': get_all_technologies(all_projects),
'selected_category': selected_category,
'selected_tech': selected_tech,
'total_count': len(projects),
})
return render(request, 'projects/list.html', context)
def project_detail(request, slug):
"""
Page détail d'un projet : description complète + galerie + highlights.
"""
project = get_project_by_slug(slug)
if project is None:
raise Http404("Projet introuvable.")
config, context = _base_context()
all_projects = load_projects()
current_index = project.get('id', 0)
context.update({
'project': project,
'prev_project': all_projects[current_index - 1] if current_index > 0 else None,
'next_project': all_projects[current_index + 1] if current_index < len(all_projects) - 1 else None,
})
return render(request, 'projects/detail.html', context)