Ben Sturmfels
531a97a3c9
The directory nesting is unnecessary here and confusing to navigate. I've moved all apps to the project subdirectory, currently called "www", but soon to be renamed "conservancy". I've also moved manage.py to the top-level directory.
58 lines
1.8 KiB
Python
58 lines
1.8 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
|
|
|
|
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, 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)
|