73 lines
3.0 KiB
Python
73 lines
3.0 KiB
Python
from django.shortcuts import render, get_object_or_404, redirect
|
|
from .models import Deal, Lead
|
|
from django.contrib import messages
|
|
from django.utils import timezone
|
|
|
|
def home(request):
|
|
"""Render the landing page with published deals."""
|
|
published_deals = Deal.objects.filter(is_published=True).order_by('-created_at')[:6]
|
|
|
|
# Simple check for sample data
|
|
if not published_deals.exists():
|
|
_create_sample_deals()
|
|
published_deals = Deal.objects.filter(is_published=True).order_by('-created_at')[:6]
|
|
|
|
context = {
|
|
"deals": published_deals,
|
|
"current_time": timezone.now(),
|
|
}
|
|
return render(request, "core/index.html", context)
|
|
|
|
def deal_detail(request, pk):
|
|
"""Render a single deal and handle lead submissions."""
|
|
deal = get_object_or_404(Deal, pk=pk)
|
|
|
|
if request.method == "POST":
|
|
name = request.POST.get("name")
|
|
email = request.POST.get("email")
|
|
message = request.POST.get("message")
|
|
|
|
if name and email:
|
|
Lead.objects.create(deal=deal, name=name, email=email, message=message)
|
|
messages.success(request, "Your request has been sent! We will contact you soon.")
|
|
return redirect('deal_detail', pk=pk)
|
|
else:
|
|
messages.error(request, "Please fill in all required fields.")
|
|
|
|
return render(request, "core/deal_detail.html", {"deal": deal})
|
|
|
|
def _create_sample_deals():
|
|
"""Seed the database with sample deals if empty."""
|
|
deals = [
|
|
{
|
|
"title": "Unreal Points Deal: London to NYC",
|
|
"deal_type": "points",
|
|
"destination": "New York, USA",
|
|
"points_required": 15000,
|
|
"description": "Virgin Atlantic points deal. Unbeatable value for Business Class upgrade.",
|
|
"image_url": "https://images.pexels.com/photos/466685/pexels-photo-466685.jpeg?auto=compress&cs=tinysrgb&w=800",
|
|
"is_published": True
|
|
},
|
|
{
|
|
"title": "Flight Drop: Bali Flash Sale",
|
|
"deal_type": "flight",
|
|
"destination": "Bali, Indonesia",
|
|
"current_price": 450.00,
|
|
"original_price": 890.00,
|
|
"description": "Round trip from LAX. Limited seats available for March/April travel.",
|
|
"image_url": "https://images.pexels.com/photos/2166553/pexels-photo-2166553.jpeg?auto=compress&cs=tinysrgb&w=800",
|
|
"is_published": True
|
|
},
|
|
{
|
|
"title": "Business Class: Paris for Less",
|
|
"deal_type": "flight",
|
|
"destination": "Paris, France",
|
|
"current_price": 1200.00,
|
|
"original_price": 2500.00,
|
|
"description": "Lufthansa luxury at half the price. Multi-city options available.",
|
|
"image_url": "https://images.pexels.com/photos/338515/pexels-photo-338515.jpeg?auto=compress&cs=tinysrgb&w=800",
|
|
"is_published": True
|
|
},
|
|
]
|
|
for d in deals:
|
|
Deal.objects.get_or_create(title=d['title'], defaults=d) |