Django - перенаправление на домашнюю страницу, если не найдено ни одного URL - PullRequest
0 голосов
/ 04 декабря 2018

По сути, моя цель - перенаправить пользователя к представлению, отображающему index.html, если ничего из URLConf не соответствует запрошенному URL.Затем на стороне клиента я бы управлял маршрутизацией соответствующим образом или показывал страницу 404.

Итак, в принципе, вопрос,

  1. , как реализовать это перенаправление в Django?Я пробовал это:

    url(r'^(.*)$', views.index),
    

    ... некоторые другие URL

... и неудивительно, что (.*) означает, что ВСЕ URL-адреса перенаправляются на индекс.html, независимо от того, соответствует ли он любому другому URL или нет.Так я должен просто поместить это в самый конец списка URL?У меня такое чувство, что мне следует использовать какое-то промежуточное программное обеспечение, или, может, у Django есть собственный способ решения этой проблемы?

Неприятный побочный эффект этого будет для пользователей моего приложения для отдыха.Каждый раз, когда они все неверно ссылаются на URL, они получают HTML (который фактически будет HTML для home.html) вместо ошибки json или 404.Ну, ничего страшного в коде index.html, и все же это звучит как плохая идея.Итак, я бы разделил эту логику, чтобы пользователи приложения REST получали ошибку 404 вместо того, чтобы перенаправляться в index.html?Это касается шаблонов кодирования, а не самого Django.И все же я был бы очень признателен за любые комментарии по этому вопросу:)

1 Ответ

0 голосов
/ 04 декабря 2018

Вы можете добавить перехват всех в конце своей конфигурации URL, но это приводит к неожиданному поведению (например, перенаправления с /my-page на /my-page/ (добавление косой черты) больше не работают).

Лучшим подходом было бы написать пользовательское связующее ПО .Вы можете посмотреть на промежуточное ПО перенаправления для вдохновения, поскольку оно обрабатывает перенаправления.

Если вы не хотите перенаправлять запросы API, вы можете добавить проверку в ваше промежуточное ПО.Например, вы не могли перенаправить запросы, где URL начинается с /api/, или запрос имеет заголовок Accept: application/json.

Другой вариант - использовать пользовательский обработчик 404 , который отображаетВаша индексная страница.Опять же, в обработчике у вас есть объект request, поэтому вы можете обрабатывать запросы API по-разному.

...