Initial commit
This commit is contained in:
97
projects/views.py
Normal file
97
projects/views.py
Normal file
@@ -0,0 +1,97 @@
|
||||
"""
|
||||
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)
|
||||
Reference in New Issue
Block a user