Получение абсолютного пути к изображению ckeditor + django + react
Django
В этой теме есть 2 вопроса, но оба из них (этот Абсолютные пути к изображениям, загружаемым django-ckeditor) не обновляются. Например, в Django 4.X url был удален. Несмотря на это, я пробовал эти решения, но ни одно мне не помогло
Я также пытался использовать:
CKEDITOR_MEDIA_PREFIX
в моем settings.py
Но и это не сработало. Это мой settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_URL = '/media/'
CKEDITOR_UPLOAD_PATH = 'uploads/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Это мой urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('api/news/', include('news.urls')),
re_path(r'^ckeditor/', include('ckeditor_uploader.urls')),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += [
re_path(r'^media/(?P<path>.*)$', serve, {
'document_root': settings.MEDIA_ROOT
}),
]
Вот мой вопрос, как я могу настроить мое приложение Django-rest-framework таким образом, чтобы я получал абсолютный путь при рендеринге html на моем next.js
сайте?
Вот что я получаю сейчас:
<img alt=\"\" src=\"/media/uploads/2022/01/19/video.svg\"/>
Вот что я хотел бы получить:
<img alt=\"\" src=\"http://website.com/media/uploads/2022/01/19/video.svg\"
React
.
Есть ли способ добиться этого из фронтенда? Например, обновление src
Если вам нужно быстрое решение (я уверен, что это не "правильный" способ сделать это), вот мой подход:
Поскольку мне нужно обновить img.src
только в одном JavaScript файле, я сделал это с помощью хука, чтобы получить все изображения, отфильтровать только те, которые хранятся на сервере, и обновить их src.
useEffect(()=>{
//! Don´t forget to update this
const imgDomain = 'https://...';
const imgStore = document.querySelectorAll("img[src]");
Object.keys(imgStore).map((x)=>{
if(imgStore[x].src.includes('uploads')){
const originalURL = imgStore[x].src;
var mediaPos = originalURL.indexOf('/media/');
var URLlength = originalURL.length;
var slicedSRC = originalURL.slice (mediaPos, URLlength);
var newSRC = imgDomain+slicedSRC;
imgStore[x].src = newSRC;
}
})
}, []);