mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-22 07:11:12 -05:00
120 lines
2.9 KiB
Python
120 lines
2.9 KiB
Python
"""
|
|
Django Sitemaps for SEO
|
|
|
|
Generates XML sitemaps for search engine crawlers to discover and index content.
|
|
"""
|
|
|
|
from django.contrib.sitemaps import Sitemap
|
|
from django.urls import reverse
|
|
|
|
from apps.entities.models import Park, Ride, Company, RideModel
|
|
|
|
|
|
class ParkSitemap(Sitemap):
|
|
"""Sitemap for theme parks."""
|
|
|
|
changefreq = "weekly"
|
|
priority = 0.9
|
|
|
|
def items(self):
|
|
"""Return all active parks."""
|
|
return Park.objects.filter(is_active=True).order_by('-updated')
|
|
|
|
def lastmod(self, obj):
|
|
"""Return last modification date."""
|
|
return obj.updated
|
|
|
|
def location(self, obj):
|
|
"""Return URL for park."""
|
|
return f'/parks/{obj.slug}/'
|
|
|
|
|
|
class RideSitemap(Sitemap):
|
|
"""Sitemap for rides."""
|
|
|
|
changefreq = "weekly"
|
|
priority = 0.8
|
|
|
|
def items(self):
|
|
"""Return all active rides."""
|
|
return Ride.objects.filter(
|
|
is_active=True
|
|
).select_related('park').order_by('-updated')
|
|
|
|
def lastmod(self, obj):
|
|
"""Return last modification date."""
|
|
return obj.updated
|
|
|
|
def location(self, obj):
|
|
"""Return URL for ride."""
|
|
return f'/parks/{obj.park.slug}/rides/{obj.slug}/'
|
|
|
|
|
|
class CompanySitemap(Sitemap):
|
|
"""Sitemap for companies/manufacturers."""
|
|
|
|
changefreq = "monthly"
|
|
priority = 0.6
|
|
|
|
def items(self):
|
|
"""Return all active companies."""
|
|
return Company.objects.filter(is_active=True).order_by('-updated')
|
|
|
|
def lastmod(self, obj):
|
|
"""Return last modification date."""
|
|
return obj.updated
|
|
|
|
def location(self, obj):
|
|
"""Return URL for company."""
|
|
return f'/manufacturers/{obj.slug}/'
|
|
|
|
|
|
class RideModelSitemap(Sitemap):
|
|
"""Sitemap for ride models."""
|
|
|
|
changefreq = "monthly"
|
|
priority = 0.7
|
|
|
|
def items(self):
|
|
"""Return all active ride models."""
|
|
return RideModel.objects.filter(
|
|
is_active=True
|
|
).select_related('manufacturer').order_by('-updated')
|
|
|
|
def lastmod(self, obj):
|
|
"""Return last modification date."""
|
|
return obj.updated
|
|
|
|
def location(self, obj):
|
|
"""Return URL for ride model."""
|
|
return f'/models/{obj.slug}/'
|
|
|
|
|
|
class StaticSitemap(Sitemap):
|
|
"""Sitemap for static pages."""
|
|
|
|
changefreq = "monthly"
|
|
priority = 0.5
|
|
|
|
def items(self):
|
|
"""Return list of static pages."""
|
|
return ['home', 'about', 'privacy', 'terms']
|
|
|
|
def location(self, item):
|
|
"""Return URL for static page."""
|
|
if item == 'home':
|
|
return '/'
|
|
return f'/{item}/'
|
|
|
|
def changefreq(self, item):
|
|
"""Home page changes more frequently."""
|
|
if item == 'home':
|
|
return 'daily'
|
|
return 'monthly'
|
|
|
|
def priority(self, item):
|
|
"""Home page has higher priority."""
|
|
if item == 'home':
|
|
return 1.0
|
|
return 0.5
|