Изображения в django не отображаются в react

Это приложение, в котором я использую django backend и react frontend. Изображения отображаются в react, когда я держу react и django отдельно и общаюсь просто с API. Однако я хочу развернуть и фронтенд, и бэкенд вместе. Я пытаюсь использовать django re_path для перенаправления любого url, который не совпадает с urls, указанными в django urls.py. Всякий раз, когда я делаю изображения из react и django перестают отображаться. И django, и react теряют путь к изображениям.

project structure
>backend
    ...
    settings.py
    urls.py
>blog
    ...
    urls.py
    serializers.py
    views.py
>frontend
    ...
    build
    src
    package.json
manage.py
>static

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('djoser.urls')),
    path('api/', include('djoser.urls.jwt')),
    path('api/', include('accounts.urls')),
    path('summernote/',include('django_summernote.urls')),
    path('api/blog/', include('blog.urls')),
    re_path('*', TemplateView.as_view(template_name='index.html')),
   
]

settings.py

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'frontend/build')
        ],
        'APP_DIRS': True,
    },
]

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static',),
    os.path.join(BASE_DIR, 'frontend/build/static'),
    ]
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

Кроме того, всякий раз, когда я использую re_path для перенаправления несовпадающих адресов с django на react, изображения в react, такие как логотип, перестают отображаться, но без установки re_path все изображения в react, включая логотипы и иконки, появляются. Как мне это исправить?

Я наконец-то исправил это, используя path вместо re_path. Мне пришлось изменить re_path('*', TemplateView.as_view(template_name='index.html')) на re_path(''', TemplateView.as_view(template_name='index.html')). Я не знаю, произошли ли изменения относительно использования repath в Django 4.0

Если синтаксис путей и конвертеров недостаточен для определения шаблонов URL, вы также можете использовать регулярные выражения. Для этого используйте re_path() вместо path().

Поэтому вы не можете написать "*". В моем случае
re_path(r'^(?P<path>.*)$'...)
будет соответствовать любому пути

Кстати. Если вы используете django-react. вы не можете использовать re_path для front-end Template. Пример:

re_path(r'^(?P<path>.*)$',TemplateView.as_view(template_name='index.html')),

Делать это приведет к ошибке corsheader при загрузке изображений

Вернуться на верх