2013-12-14 3 views
3

Итак, в моих проектах я хотел добавить пользовательскую страницу ошибки 404, поэтому я следил за тем, что я мог найти в Интернете, но ничего не работало для меня.Django custom 404 страница не работает

Это то, что у меня есть мои файлы:

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') 

Всякий раз, когда я пытаюсь для ввода случайного URL, однако, inste объявление о ошибке 404, я получаю ошибку сервера (500).

Как я уже сказал, я пробовал это разными способами, но ни один из них не работал для меня.

Кроме того, еще одна проблема, с которой я столкнулся, заключается в том, что страницы, на которых я загружаюсь, очень медленно, и они не открывают стиль или изображения, поэтому я предполагаю, что когда DEBUG = False, мне нужно, чтобы все было уже в сети. Это верно?

+2

Какова трассировка 500 ошибок? – iMom0

+1

Не используйте ALLOWED_HOSTS = ["*"] в производстве! – user937284

ответ

0
def error404(request): 
    return HttpResponseNotFound(render_to_string('404.html')) 

В качестве другого примера:

def error404(request): 
    return render(request,'404.html', status=404) 
+0

Кажется, код состояния не вызовет 500? – iMom0

+0

Вы не указали в urlpatterns? Попробуйте добавить '('^ 404/$', 'HogwartsMail.views.error404')' – crazyzubr

+0

Определенно указать 'handler404' правильный путь. – iMom0

0

Хорошо, получается, что я, кажется, не нужно ничего делать, но создать страницу 404.html. Создавая, когда возникает ошибка «Страница не найдена», Django сначала ищет 404.html в ваших шаблонах, прежде чем использовать собственную страницу ошибок. У меня все еще есть проблемы с моими статическими файлами, которые не находятся в Интернете, - при установке DEBUG = False не появляется ни файл css, ни мои изображения. Кроме этого, моя проблема исправлена.

+0

запустить python manage.py collectstatic – dave4jr

2

Когда DEBUG = False, вы можете использовать python manage.py runserver --insecure для обслуживания статических файлов во время локальной разработки.

Дополнительную информацию см. В this answer.

3

В urls.py папки проекта добавить это где счета (это может быть любое приложение) является приложением одного и того же проекта:

проекта/urls.py

handler404 = 'accounts.views.page_not_found' 

По мнению счетов добавить следующее:

счета/views.py

def page_not_found(request): 

""" 
Page not found Error 404 
""" 

    response = render_to_response('404.html',context_instance=RequestContext(request)) 
    response.status_code = 404 
    return response 

Не забудьте сделать необходимый импорт. Также не забудьте изменить Debug = False в settings.py при тестировании в стадии.

Смежные вопросы