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?

Вернуться на верх