




Обычно это конфигурация Apache/NGINX (интерфейсный веб-сервер).
Вы должны настроить его так, чтобы он обслуживал одно и то же представление Django, куда вы включили свой источник React, для каждого маршрута, используемого вашим приложением React.
Пример nginx:
location ~ ^/your-django-view/?(.*) {
# rewrite ^ index.html;
proxy_pass http://127.0.0.1:8000;
break;
}
127.0.0.1:8000 должно быть изменено с вашим django host:port.
Я только что добавил re_path к своему urls.py проекту Django)) Спасибо!
В настоящее время ваш сервер перехватывает маршруты, предназначенные для React, и пытается их обработать. Вам нужно настроить свои маршруты так, чтобы только фактические маршруты сервера обрабатывались сервером (обычно с префиксом "/api/"), а все остальные обрабатывались React.
Не видя вашего файла urls.py, я предполагаю, что у вас есть базовый/голый маршрут ("/") для перехода к приложению React, которое отлично работает для первоначальных запросов (на домашнюю страницу), но начинает ломаться при использовании ссылки или обновлении. страница.
Ваша маршрутизация должна в основном использовать приложение React так, как обычно используются страницы 404 — когда для запроса не найдены подходящие маршруты на сервере. Важно, чтобы вы определили все остальные маршруты выше маршрута к приложению React, чтобы все, что знает сервер, обрабатывалось сервером, а остальное передавалось клиенту React.
Таким образом, ваши URL-адреса должны выглядеть примерно так:
from django.conf.urls import url, include
from django.views.generic import TemplateView
urlpatterns = [
url(r"^api/v1/", include("api_v1.urls", namespace = "api_v1")),
url(r"^.*", TemplateView.as_view(template_name = "index.html")),
]
Где index.html — это ваше приложение React.
Это работает, но тогда я не могу получить доступ к статическим файлам сервера, например, чтобы получить аватарки. Можно ли как-то исключить некоторые ссылки?
@CoderBug любые URL-адреса, которые вы определяете над для index.html, будут работать нормально, обратите внимание, что с этой настройкой мы в основном рассматриваем приложение React как случай по умолчанию и используем его только в том случае, если ничего еще не совпало. Таким образом, вы можете определить URL-адрес для "^static/" или аналогичный перед URL-адресом для приложения React, и он будет работать нормально.
Добавление хэш-браузера, вероятно, самый простой способ решить эту проблему.