mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 16:31:08 -05:00
76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
from django.shortcuts import render
|
|
from django.views.generic import TemplateView
|
|
from django.db.models import Count, Q
|
|
from parks.models import Park
|
|
from rides.models import Ride
|
|
from companies.models import Company, Manufacturer
|
|
|
|
def handler404(request, exception):
|
|
return render(request, '404.html', status=404)
|
|
|
|
def handler500(request):
|
|
return render(request, '500.html', status=500)
|
|
|
|
class HomeView(TemplateView):
|
|
template_name = 'home.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
|
|
# Get stats
|
|
context['stats'] = {
|
|
'total_parks': Park.objects.count(),
|
|
'total_rides': Ride.objects.count(),
|
|
'total_roller_coasters': Ride.objects.filter(category='RC').count(),
|
|
}
|
|
|
|
# Get popular parks (based on average rating)
|
|
context['popular_parks'] = Park.objects.exclude(
|
|
average_rating__isnull=True
|
|
).order_by('-average_rating')[:5]
|
|
|
|
# Get popular rides (based on average rating)
|
|
context['popular_rides'] = Ride.objects.exclude(
|
|
average_rating__isnull=True
|
|
).order_by('-average_rating')[:5]
|
|
|
|
return context
|
|
|
|
class SearchView(TemplateView):
|
|
template_name = 'search_results.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
query = self.request.GET.get('q', '').strip()
|
|
|
|
if query:
|
|
# Search parks
|
|
context['parks'] = Park.objects.filter(
|
|
Q(name__icontains=query) |
|
|
Q(location__icontains=query) |
|
|
Q(description__icontains=query)
|
|
).select_related('owner').prefetch_related('photos')[:10]
|
|
|
|
# Search rides
|
|
context['rides'] = Ride.objects.filter(
|
|
Q(name__icontains=query) |
|
|
Q(description__icontains=query) |
|
|
Q(manufacturer__name__icontains=query)
|
|
).select_related('park', 'coaster_stats').prefetch_related('photos')[:10]
|
|
|
|
# Search companies
|
|
context['companies'] = Company.objects.filter(
|
|
Q(name__icontains=query) |
|
|
Q(headquarters__icontains=query) |
|
|
Q(description__icontains=query)
|
|
).prefetch_related('parks')[:10]
|
|
|
|
# Search manufacturers
|
|
context['manufacturers'] = Manufacturer.objects.filter(
|
|
Q(name__icontains=query) |
|
|
Q(headquarters__icontains=query) |
|
|
Q(description__icontains=query)
|
|
).prefetch_related('rides')[:10]
|
|
|
|
return context
|