Django - пытается использовать APPEND_SLASH и пользовательский вид 404 - PullRequest
1 голос
/ 25 апреля 2011

Обычно я добавляю регулярное выражение 404 для всех моих сайтов Django в качестве последнего выражения в моем urls.py:

urlpatterns += patterns('django.views.generic.simple',
    (r'^.', 'direct_to_template', {'template': 'unknown.html'}),

Я в целом доволен производительностью этого.Шаблон unknown.html расширяет мой базовый шаблон и приятно информирует зрителя о том, что введенного им URL-адреса не существует, но на странице все еще есть навигация и стиль моего веб-сайта.

Тем не менее, после того, как мне приходится неоднократно указывать людям вводить косую черту, я чувствую, что необходимо установить параметр APPEND_SLASH = True в settings.py.

состояние документов:

Если APPEND_SLASH имеет значение True и начальный URL-адрес не заканчивается косой чертой, и он не найден в URLconf, то новый URL-адрес формируется путем добавлениякосая черта в конце.Если этот новый URL-адрес найден в URLconf, Django перенаправляет запрос на этот новый URL-адрес.В противном случае исходный URL-адрес обрабатывается как обычно.

Поэтому, следуя этой логике, foo.com/bar успешно перехватывается моим выражением URL-адреса "404", прежде чем его можно будет перенаправить на мой foo.com/.Выражение bar / url.* Каков наилучший способ сохранить дружественную / настраиваемую страницу 404 с дружественным пользовательским интерфейсом и при этом использовать APPEND_SLASH или что-то похожее по функциональности? *

- редактировать / ответить -

Почему-то я упустил, что вам просто нужно добавить шаблон с именем 404.html, а также убедиться, что DEBUG = False

Спасибо DTing!

1 Ответ

3 голосов
/ 25 апреля 2011

Я думаю, что вы можете просто настроить свой 404.html вместо использования "catchall", так как вы просто перенаправляете на пользовательский шаблон. Нет никаких причин, по которым ваш пользовательский шаблон 404.html не может расширять base.html вашего сайта.

http://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views

Три вещи, на которые стоит обратить внимание: около 404 просмотров:

  • Представление 404 также вызывается, если Джанго не находит соответствия после проверяя каждое регулярное выражение в URLconf.
  • Если вы не определяете свое собственное представление 404 - а просто используете значение по умолчанию, что рекомендуется - у вас еще есть одно обязательство: вы должны создать 404.html шаблон в корне вашего каталога шаблонов. По умолчанию 404 представление будет использовать этот шаблон для всех 404 ошибки. Представление 404 по умолчанию будет передать одну переменную в шаблон: request_path, который является URL, который привело к 404.
  • Представлению 404 передается RequestContext, и он будет иметь доступ к переменные, предоставленные вашим Настройка TEMPLATE_CONTEXT_PROCESSORS (например, MEDIA_URL).
  • Если для DEBUG установлено значение True (в вашем модуле настроек), то ваш 404 вид никогда не будет использоваться, и трассировка будет отображаться вместо.

если вы хотите использовать пользовательский вид,

Это представление page_not_found должно достаточно для 99% веб-приложений, но если вы хотите переопределить 404 вид, вы можете указать handler404 в ваш URLconf, вот так:

handler404 = 'mysite.views.my_custom_404_view'
...