Render server errors with a nicer template

This commit is contained in:
Magnus Hagander
2011-08-17 20:28:03 +02:00
parent bb30e59c56
commit 91d6cce18f
4 changed files with 17 additions and 8 deletions

View File

@ -1,6 +1,6 @@
from django.contrib.auth.models import User
import django.contrib.auth.views as authviews
from django.http import HttpResponseRedirect, HttpResponse, Http404, HttpResponseServerError
from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required
from django.utils.http import int_to_base36
@ -10,6 +10,7 @@ from django.conf import settings
from pgweb.util.decorators import ssl_required
from pgweb.util.contexts import NavContext
from pgweb.util.misc import send_template_mail
from pgweb.util.helpers import HttpServerError
from pgweb.news.models import NewsArticle
from pgweb.events.models import Event
@ -84,7 +85,7 @@ def resetpwd(request):
@ssl_required
def signup(request):
if request.user.is_authenticated():
return HttpResponseServerError("You must log out before you can sign up for a new account")
return HttpServerError("You must log out before you can sign up for a new account")
if request.method == 'POST':
# Attempt to create user then, eh?

View File

@ -1,5 +1,5 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponse, Http404, HttpResponseRedirect, HttpResponseServerError
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.template import TemplateDoesNotExist, loader, Context
from django.contrib.auth.decorators import login_required
from django.db import connection, transaction
@ -12,7 +12,7 @@ import cPickle as pickle
from pgweb.util.decorators import ssl_required, nocache
from pgweb.util.contexts import NavContext
from pgweb.util.helpers import simple_form, PgXmlHelper
from pgweb.util.helpers import simple_form, PgXmlHelper, HttpServerError
from pgweb.util.misc import get_client_ip
from models import *
@ -39,7 +39,7 @@ def ftpbrowser(request, subpath):
allnodes = pickle.load(f)
f.close()
except Exception, e:
return HttpResponseServerError("Failed to load ftp site information: %s" % e)
return HttpServerError("Failed to load ftp site information: %s" % e)
if not allnodes.has_key(subpath):
raise Http404

View File

@ -1,10 +1,11 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponse, Http404, HttpResponseServerError, HttpResponseRedirect
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.db import connection
from django.template.defaultfilters import slugify
from pgweb.util.contexts import NavContext
from pgweb.util.misc import get_client_ip
from pgweb.util.helpers import HttpServerError
from models import Survey, SurveyAnswer, SurveyLock
@ -24,7 +25,7 @@ def vote(request, surveyid):
try:
ansnum = int(request.POST['answer'])
if ansnum < 1 or ansnum > 8:
return HttpResponseServerError("Invalid answer")
return HttpServerError("Invalid answer")
except:
# When no answer is given, redirect to results instead
return HttpResponseRedirect("/community/survey/%s-%s" % (surv.id, slugify(surv.question)))
@ -40,7 +41,7 @@ def vote(request, surveyid):
# Check if we are locked
lock = SurveyLock.objects.filter(ipaddr=addr)
if len(lock) > 0:
return HttpResponseServerError("Too many requests from your IP in the past 15 minutes")
return HttpServerError("Too many requests from your IP in the past 15 minutes")
# Generate a new lock item, and store it
lock = SurveyLock(ipaddr=addr)

View File

@ -57,6 +57,13 @@ def simple_form(instancetype, itemid, request, formclass, formtemplate='base/for
def template_to_string(templatename, attrs = {}):
return get_template(templatename).render(Context(attrs))
def HttpServerError(msg):
r = render_to_response('errors/500.html', {
'message': msg,
})
r.status_code = 500
return r
class PgXmlHelper(django.utils.xmlutils.SimplerXMLGenerator):
def __init__(self, outstream, skipempty=False):