So, in my projects I wanted to add a custom 404 error page, so I followed what I could find on the web, but nothing seemed to work for me.
This is what I have on my files:
settings.py
import os
# Django settings for HogwartsMail project.
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
DEBUG = False
TEMPLATE_DEBUG = DEBUG
# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = ["*"]
urls.py
urlpatterns = patterns('',
...
)
handler404 = "HogwartsMail.views.error404"
views.py
def error404(request):
return render(request,'404.html')
Whenever I try to enter a random url, though, instead of getting a 404 error, I get a Server Error (500).
As I've said, i tried it many different ways, but none actually worked for me.
Also, another problem I am having is that the pages I have load really slowly and they don't open the styling or images, so I assume that, when DEBUG = False
, I need everything to be already online. Is that correct?
as another example:
As a best practice I've add 2
urls.py
in my project. So I addhandler404
in my baseurls.py
. my parenturls.py
is look like thisand
error_404
is a view in myviews.py
. like thischeck the full tutorial here
In the urls.py of project folder add this where the accounts (it can be any app) is an app of the same project:
project/urls.py
In accounts' view add this:
accounts/views.py
Don't forget to make necessary imports. Also don't forget to change Debug=False in settings.py when testing in staging.
Ok, it turns out I don't seem to need to do anything but create a 404.html page. By creating in, when an "Page not found" error is raised, Django will first look for a 404.html in your templates, before using it's own error page. I still have a problem with my static files not being on the web - when set
DEBUG = False
neither the css file nor any of my images appear. Other than that, my problem as fixed.When
DEBUG = False
, you can usepython manage.py runserver --insecure
to serve the static files during local development.See more information in this answer.