Как мне настроить URL-адреса django, чтобы сделать так, чтобы при отображении 404 он перенаправлялся на Reactjs

#django #reactjs #django-views #react-router #django-urls

#django #reactjs #django-views #react-router #django-urls

Вопрос:

Название ужасно — извините за это.

Итак, скажем, у меня есть веб-сайт, который говорит www.myhairynose.com /. Я настроил свой urls.py так что всякий раз, когда человек входит www.myhairynose.com это перенаправляет их на index.html (где он отображает приложение reactjs). Я установил reactjs с помощью react-router и сделал так, чтобы при нажатии кнопки на индексной странице она переходила на www.myhairynose.com/#/webpage .

Дело в том… Я этого не хочу.

Я хочу, чтобы он переходил к www.myhairnose.com/webpage . Однако я хочу, чтобы react обрабатывал это, а не django. ВСЕ эти URL-адреса должны быть в одном приложении index.html . Как мне настроить django urls.py так что, если я войду www.myhairynose.com/webpage он переходит к индексу www.myhairnose.com Приложение ReactJS, а затем оно проверяет, есть ли у маршрута веб-страница. В противном случае скажите, перешел ли я к www.myhairynose.com/asdkjaskldsaj (которого нет в маршруте react), он должен отображать значение 404.

______TLDR______ В основном то, что я хочу, чтобы произошло:

 User goes to website.com/name
>if website.com/name exists in django - it returns a html doc
>if not then it redirects to website.com/ where ReactJs will handle the url and see if it matches any of the routers
...> if it does, then it displays that route
...> if not then it displays a django 404 or a custom 404 page.
 

Как мне настроить django и reactjs для этого?

Комментарии:

1. Я нашел обходной путь, но я не уверен, является ли это правильным стандартом или методом для этого. Я жестко запрограммировал каждый react.js ссылка на маршрут в мой urls.py указал каждый из URL-адресов на домашний шаблон. Это сработало

Ответ №1:

Используете ли вы Django для рендеринга react? Я делаю предположение, что у вас есть какой-то вид, подобный views.LoadReactView .

Что вам нужно, так это универсальный маршрут.

 from django.contrib import admin
from myapp import views

urlpatterns = [
    ...
    url(r'^admin', admin.site.urls),
    url(r'^', views.LoadReactView.as_view()),
] 
 

Это должно отображаться как ваш самый последний шаблон. По сути, вы говорите: «после проверки всех других маршрутов, если совпадений нет, идите сюда».

Кроме того, вы также можете просто определить свой основной вид в качестве обработчика 404

 urlpatterns = [
    ...
]

handler404 = views.LoadReactView.as_view
 

Комментарии:

1. r’^*’ вернул какую-то ошибку, вы имеете в виду r’^’?

2. когда я добавляю r’^’, это не позволяет мне получить доступ к другим моим URL-адресам, таким как /admin

3. Извините, исправленный ответ. Что касается /admin , как я уже сказал, этот шаблон должен быть САМЫМ последним. Я добавляю строку администратора к своему ответу для ясности.

4. да, я поместил это в самый конец, но вместо этого /admin перенаправляет на мою домашнюю страницу.

5. from django.conf.urls import include, url from django.contrib import admin from . import views urlpatterns = [ # url(r'^polls/', include('polls.urls')), url(r'^admin/', admin.site.urls), url(r'^message/', views.message, name="message"), url(r'^', views.home, name='home'), ]