Random 500 Server Errors On Django 6 Website After Going Live
I've built a small, lightweight website for the first time using Django 6.0 with Python 3.12. There is one page that pulls data from the database, and that page has random 500 internal server errors appear. Refreshing the page will usually display the page as intended. I cannot recreate this error in my development environment; it only happens on my production environment.
The error I'm getting in the logs looks like this:
ERROR 2026-01-13 11:34:37,581 log 791 124526765520576 Internal Server Error: /menu/
Traceback (most recent call last):
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 198, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/menu/views.py", line 25, in menu
return render(request, "menu/menu.html", context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/shortcuts.py", line 25, in render
content = loader.render_to_string(template_name, context, request, using=using)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/backends/django.py", line 107, in render
return self.template.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 174, in render
return self._render(context)
^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 166, in _render
return self.nodelist.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 1091, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 1052, in render_annotated
return self.render(context)
^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/loader_tags.py", line 160, in render
return compiled_parent._render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 166, in _render
return self.nodelist.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 1091, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 1052, in render_annotated
return self.render(context)
^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/loader_tags.py", line 66, in render
result = block.nodelist.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 1091, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 1052, in render_annotated
return self.render(context)
^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/defaulttags.py", line 249, in render
nodelist.append(node.render_annotated(context))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 1052, in render_annotated
return self.render(context)
^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/defaulttags.py", line 333, in render
return nodelist.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 1091, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 1052, in render_annotated
return self.render(context)
^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 1156, in render
return render_value_in_context(output, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/template/base.py", line 1130, in render_value_in_context
value = localize(value, use_l10n=context.use_l10n)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/utils/formats.py", line 208, in localize
return number_format(value, use_l10n=use_l10n)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/utils/formats.py", line 182, in number_format
return numberformat.format(
^^^^^^^^^^^^^^^^^^^^
File "/var/www/juliasempanadassite/venv/lib/python3.12/site-packages/django/utils/numberformat.py", line 28, in format
if number is None or number == "":
^^^^^^^^^^^^
File "<frozen abc>", line 119, in __instancecheck__
My view.py looks like this:
from django.shortcuts import render
from .models import Category, MenuItem, Highlight, Offer
def index(request):
highlights = Highlight.objects.order_by("sort_order")
offers = Offer.objects.order_by("sort_order")
context = {"highlights": highlights, "offers": offers}
return render(request, "menu/index.html", context)
def about(request):
context = {}
return render(request, "menu/about.html", context)
def menu(request):
categories = Category.objects.order_by("sort_order")
menu_items = MenuItem.objects.order_by("category_id", "sort_order")
context = {"categories": categories, "menu_items": menu_items}
return render(request, "menu/menu.html", context)
The associated template is:
{% extends "menu/base.html"%}
{% load static %}
{% block content %}
<body class="sub_page">
<div class="hero_area">
<div class="bg-box">
<img src="{% static 'menu/images/hero-bg.png' %}" alt="Julia's Empanadas">
</div>
<!-- header section strats -->
<header class="header_section">
<div class="container">
<nav class="navbar navbar-expand-lg custom_nav-container ">
<a class="navbar-brand" href="/">
<span>
Julia's Empanadas
</span>
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class=""> </span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mx-auto ">
<li class="nav-item">
<a class="nav-link" href="/">Home </a>
</li>
<li class="nav-item active">
<a class="nav-link" href="/menu/">Menu <span class="sr-only">(current)</span> </a>
</li>
<li class="nav-item">
<a class="nav-link" href="/about/">About</a>
</li>
</ul>
</div>
</nav>
</div>
</header>
<!-- end header section -->
</div>
<!-- food section -->
<section class="food_section layout_padding">
<div class="container">
<div class="heading_container heading_center">
<h2>
Our Menu
</h2>
</div>
<ul class="filters_menu">
<li class="active" data-filter="*">All</li>
{% for category in categories %}
<li data-filter=".{{ category.short_name }}">{{ category.name }}</li>
{% endfor %}
</ul>
<div class="filters-content">
<div class="row grid">
{% for item in menu_items %}
<div class="col-sm-6 col-lg-4 all {{ item.category.short_name }}">
<div class="box">
<div>
<div class="img-box">
{% with '/menu/images/'|add:item.image as image_static %}
<img src="{% static image_static %}" alt="{{ item.name }}">
{% endwith %}
</div>
<div class="detail-box">
<h5>
{{ item.name }}
</h5>
<p>
{{ item.description }}
</p>
<div class="options">
<h6>
{% if item.category.price_for_all == True %}
${{ item.category.price }}
{% else %}
${{ item.price }}
{% endif %}
</h6>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</section>
<!-- end food section -->
The models look like:
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=200)
short_name = models.CharField(max_length=20, null=True)
price = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
price_for_all = models.BooleanField(default=False)
sort_order = models.IntegerField(default=1)
def __str__(self):
return self.name
class MenuItem(models.Model):
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
name = models.CharField(max_length=200)
description = models.TextField(blank=True, null=True)
image = models.CharField(max_length=255, blank=True, null=True)
price = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
sort_order = models.IntegerField(default=1)
def __str__(self):
return self.name
class Highlight(models.Model):
title = models.CharField(max_length=50)
blurb = models.TextField()
link = models.CharField(max_length=50, blank=True, null=True)
link_text = models.CharField(max_length=30, blank=True, null=True)
sort_order = models.IntegerField(default=1)
def __str__(self):
return self.title
class Offer(models.Model):
title = models.CharField(max_length=50)
percent_off = models.IntegerField()
image = models.CharField(max_length=255, blank=True, null=True)
sort_order = models.IntegerField(default=1)
def __str__(self):
return self.title
The view that is having the random 500 errors is the menu.
How to solve this issue with this particular page of the site?