import mimetypes import os.path from django.http import HttpResponse from django.template.response import TemplateResponse from .local_context_processors import fundgoal_lookup # This component doesn't actually have anything to do with Django's # "staticfiles" app. It's only that its templates happen to be located in the # STATIC_ROOT directory. They probably shouldn't be there. STATIC_ROOT = os.path.abspath(os.path.dirname(__file__)) FILESYSTEM_ENCODING = 'utf-8' def handler(request, errorcode): path = os.path.join('error', str(errorcode), 'index.html') fullpath = os.path.join(STATIC_ROOT, path) if not os.path.exists(fullpath): return HttpResponse("Internal error: " + path, status=int(errorcode)) else: return TemplateResponse(request, path, status=int(errorcode)) def handler401(request): return handler(request, 401) def handler403(request): return handler(request, 403) def handler404(request): return handler(request, 404) def handler500(request): return handler(request, 500) def index(request, *args, **kwargs): path = request.path.lstrip('/') if path.endswith('/'): path += 'index.html' fullpath = os.path.join(STATIC_ROOT, 'static', path) try: # Junk URLs in production (Python 3.5) are causing UnicodeEncodeErrors # here. Can't reproduce in development in Python 3.9 - only Python 2.7. if not os.path.exists(fullpath): return handler404(request) except UnicodeEncodeError: return handler404(request) content_type, _ = mimetypes.guess_type(path) if content_type != 'text/html': return HttpResponse(open(fullpath, 'rb'), content_type) else: context = kwargs.copy() try: context['fundgoal'] = fundgoal_lookup(kwargs['fundraiser_sought']) except KeyError: pass return TemplateResponse(request, path, context) def debug(request): path = request.get_full_path() path = path.lstrip('/') return HttpResponse("Hello, static world: " + path)