61 lines
2 KiB
Python
61 lines
2 KiB
Python
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)
|