Плохо 1: Вы защищаете страницы полезной ошибки.
Bad 2: Django не является веб-сервером, поэтому не обслуживайте статический контент с помощью Django.
Если пользователь запрашивает страницу, которой не существует, обычно нужно вернуть страницу 404, которая не найдена. Страница 404 должна сообщить посетителю, что произошло, и что делать дальше.
Пример: https://stackoverflow.com/doesnotexcist/
Джанго также может быть настроен на электронную почту ошибки о неработающих ссылках (404 «страница не найдена» ошибки). Django отправляет письма о 404 ошибках, когда: DEBUG - False; В настройках MIDDLEWARE_CLASSES: django.middleware.common.BrokenLinkEmailsMiddleware.
https://docs.djangoproject.com/en/1.6/howto/error-reporting/#errors
Теперь вы можете исправить свои неработающие ссылки, когда это необходимо, и если вы получите пользователей пустячный URL, просто увидеть его как запрос функций. С перехватом всех перенаправлений вы находитесь в темноте.
UPDATE: Как поднять 404
В вашем views.py вы можете попытаться получить объект и, если он не существует приподнять 404 не найдено:
from django.http import Http404
def my_view(request):
try:
my_object = MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
raise Http404
Но уборщик для использования функции быстрого доступа:
from django.shortcuts import get_object_or_404
def my_view(request):
my_object = get_object_or_404(MyModel, pk=1)
Существует также get_list_or_404
. Подробнее о возвращающихся 404, ярлыках и мнений пишущих на: https://docs.djangoproject.com/en/dev/topics/http/shortcuts/ и https://docs.djangoproject.com/en/dev/topics/http/views/#django.http.Http404
Когда поднимают Http404 изнутри зрения, Джанго нагрузок и делает шаблон 404.html если вы создали его в корневой директории шаблона. Поэтому добавьте шаблон шаблона. Создайте файл с именем 404.html в/проекте/шаблоны /:
{% extends "base.html" %}
{% block title %}HTTP 404 - Page not found{% endblock %}
{% block content %}
<h1>HTTP404</h1>
<p>Snap! Something went wrong. The page you requested could not be found!</p>
<!-- Present some navigation alternatives -->
</div>
{% endblock %}
Обратите внимание, что это презентация для людей.Но реальный важный бит код состояния возвращаемых данных:
allcaps$ curl -I https://stackoverflow.com/doesnotexcist/
HTTP/1.1 404 Not Found
Cache-Control: private
Content-Length: 18290
Content-Type: text/html; charset=utf-8
X-Frame-Options: SAMEORIGIN
Date: Fri, 27 Sep 2013 08:50:43 GMT
HTTP/1.1 404 Not Found
говорит гусеничный ботам, что они не должны индексировать страницу.
Примечание. Если DEBUG имеет значение True, Django отображает полезную страницу ошибки 404 с трассировкой, предназначенной для разработчиков. Но если DEBUG False (производство), то он отображает только что созданный шаблон. Поэтому убедитесь, что в settings.py DEBUG = False
проверьте шаблон, который вы только что создали.
1) 'my_view' должен что-то вернуть. 2) Удалите 'docfile = request.FILES ['docfile']' или исправьте отступ. – allcaps