Here is what I have done to use a custom 404 page.
In urls.py,
urlpatterns = patterns('',
url(r'^$', views.home, name='home'),
url(r'^blog/(?P<post>\d)$', views.blog, name='blog'),
url(r'^blog$', views.blog),
url(r'^.+$', views._404),
)
What this does is this, django will try to match the requested url with the first three patterns and on failing will always match with the last pattern, thanks to the regex, and will load the 404.html template. Now I know that the response will have a "OK 200" code instead of 404 but how much of an issue is this? Will this raise any complications or security holes? Thanks again.