mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-21 12:11:07 -05:00
first commit
This commit is contained in:
75
thrillwiki/views.py
Normal file
75
thrillwiki/views.py
Normal file
@@ -0,0 +1,75 @@
|
||||
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
|
||||
Reference in New Issue
Block a user