mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 10:31:09 -05:00
Prevents 500 errors by filtering out parks and rides with null or empty slugs from trending lists and excludes them from database queries where slugs are required. Additionally, it adds conditional rendering in templates to handle parks without slugs gracefully. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 0bdea3fb-49ea-4863-b501-fa6f5af0cbf0 Replit-Commit-Checkpoint-Type: intermediate_checkpoint
129 lines
5.6 KiB
HTML
129 lines
5.6 KiB
HTML
{% extends 'base/base.html' %}
|
|
{% load static %}
|
|
{% load cotton %}
|
|
|
|
{% block title %}ThrillWiki - Theme Parks & Attractions Guide{% endblock %}
|
|
|
|
{% block content %}
|
|
<!-- Hero Section -->
|
|
<div class="mb-12 bg-white border border-gray-200 rounded-lg shadow-lg dark:bg-gray-800 dark:border-gray-700">
|
|
<div class="px-4 py-12 text-center">
|
|
<h1 class="mb-6 text-4xl font-bold text-gray-900 md:text-5xl lg:text-6xl dark:text-white">
|
|
Welcome to ThrillWiki
|
|
</h1>
|
|
<p class="max-w-3xl mx-auto mb-8 text-xl text-gray-600 md:text-2xl dark:text-gray-300">
|
|
Your ultimate guide to theme parks and attractions worldwide
|
|
</p>
|
|
<div class="flex flex-wrap justify-center gap-4">
|
|
<a href="{% url 'parks:park_list' %}"
|
|
class="px-8 py-3 text-lg btn-primary">
|
|
Explore Parks
|
|
</a>
|
|
<a href="{% url 'rides:global_ride_list' %}"
|
|
class="px-8 py-3 text-lg btn-secondary">
|
|
View Rides
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Stats Section -->
|
|
<div class="grid-adaptive-sm mb-12">
|
|
<!-- Total Parks -->
|
|
<a href="{% url 'parks:park_list' %}"
|
|
class="flex flex-col items-center justify-center p-6 text-center transition-transform transform bg-white rounded-lg shadow-lg dark:bg-gray-800 hover:-translate-y-1 hover:shadow-xl">
|
|
<div class="mb-2 text-4xl font-bold text-blue-600 dark:text-blue-400">
|
|
{{ stats.total_parks }}
|
|
</div>
|
|
<div class="text-xl text-gray-600 dark:text-gray-300">
|
|
Theme Parks
|
|
</div>
|
|
</a>
|
|
|
|
<!-- Total Attractions -->
|
|
<a href="{% url 'rides:global_ride_list' %}"
|
|
class="flex flex-col items-center justify-center p-6 text-center transition-transform transform bg-white rounded-lg shadow-lg dark:bg-gray-800 hover:-translate-y-1 hover:shadow-xl">
|
|
<div class="mb-2 text-4xl font-bold text-blue-600 dark:text-blue-400">
|
|
{{ stats.ride_count }}
|
|
</div>
|
|
<div class="text-xl text-gray-600 dark:text-gray-300">
|
|
Attractions
|
|
</div>
|
|
</a>
|
|
|
|
<!-- Total Roller Coasters -->
|
|
<a href="{% url 'rides:global_roller_coasters' %}"
|
|
class="flex flex-col items-center justify-center p-6 text-center transition-transform transform bg-white rounded-lg shadow-lg dark:bg-gray-800 hover:-translate-y-1 hover:shadow-xl">
|
|
<div class="mb-2 text-4xl font-bold text-blue-600 dark:text-blue-400">
|
|
{{ stats.coaster_count }}
|
|
</div>
|
|
<div class="text-xl text-gray-600 dark:text-gray-300">
|
|
Roller Coasters
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
<!-- Featured Content -->
|
|
<div class="grid-adaptive">
|
|
<!-- Trending Parks -->
|
|
<div class="p-6 bg-white rounded-lg shadow-lg dark:bg-gray-800">
|
|
<h2 class="mb-6 text-2xl font-bold text-gray-900 dark:text-white">
|
|
Trending Parks
|
|
</h2>
|
|
<div class="space-y-4">
|
|
{% for park in popular_parks %}
|
|
<c-park_card park=park view_mode="grid" class="h-48" />
|
|
{% empty %}
|
|
<div class="flex flex-col items-center justify-center h-48 p-8 text-center bg-gray-50 rounded-lg dark:bg-gray-800/50">
|
|
<div class="mb-4 text-4xl">🎢</div>
|
|
<div class="text-lg font-medium text-gray-900 dark:text-white">No Parks Yet</div>
|
|
<div class="text-sm text-gray-600 dark:text-gray-400">Parks will appear here once they're added to the database</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Trending Rides -->
|
|
<div class="p-6 bg-white rounded-lg shadow-lg dark:bg-gray-800">
|
|
<h2 class="mb-6 text-2xl font-bold text-gray-900 dark:text-white">
|
|
Trending Rides
|
|
</h2>
|
|
<div class="space-y-4">
|
|
{% for ride in popular_rides %}
|
|
<c-ride_card ride=ride class="h-48" url_variant="park" />
|
|
{% empty %}
|
|
<div class="flex flex-col items-center justify-center h-48 p-8 text-center bg-gray-50 rounded-lg dark:bg-gray-800/50">
|
|
<div class="mb-4 text-4xl">🎠</div>
|
|
<div class="text-lg font-medium text-gray-900 dark:text-white">No Rides Yet</div>
|
|
<div class="text-sm text-gray-600 dark:text-gray-400">Rides will appear here once they're added to the database</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Highest Rated -->
|
|
<div class="p-6 bg-white rounded-lg shadow-lg dark:bg-gray-800">
|
|
<h2 class="mb-6 text-2xl font-bold text-gray-900 dark:text-white">
|
|
Highest Rated
|
|
</h2>
|
|
<div class="space-y-4">
|
|
{% for item in highest_rated %}
|
|
{% if item.park %}
|
|
<!-- This is a ride -->
|
|
<c-ride_card ride=item class="h-48" url_variant="park" />
|
|
{% else %}
|
|
<!-- This is a park -->
|
|
<c-park_card park=item view_mode="grid" class="h-48" />
|
|
{% endif %}
|
|
{% empty %}
|
|
<div class="flex flex-col items-center justify-center h-48 p-8 text-center bg-gray-50 rounded-lg dark:bg-gray-800/50">
|
|
<div class="mb-4 text-4xl">⭐</div>
|
|
<div class="text-lg font-medium text-gray-900 dark:text-white">No Ratings Yet</div>
|
|
<div class="text-sm text-gray-600 dark:text-gray-400">Highest rated content will appear here once users start rating</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|