#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'), ]