Файл загружается, но затем в API отображается неверный URL

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

Рабочая часть выглядит следующим образом:

 file = models.FileField(upload_to=upload_file)
 

Метод определяется как:

 def upload_file(instance, filename):
   return '{user}/{filename}'.format(user=instance.user, filename=filename)
 

У settings.py меня установлены следующие пути:

 STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'media')
MEDIA_URL = '/media/'
(...)
# For reference:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
 

После загрузки файла через интерфейс администратора появляется сообщение об успешном завершении, и файл появляется в static/media/admin/<file> местоположении. static Каталог находится на BASE_DIR том же уровне, db.sqlite3 что и упомянутый в приведенном выше отрывке.

Однако при отображении местоположения изображения в API я получаю что-то вроде:

 "file": "http://127.0.0.1:8000/media/uploads/admin/<file>"
 

Как вы ясно видите, static каталог пропущен, и я получаю 404 после нажатия на ссылку.

Что должно быть исправлено, чтобы заставить его работать в Django 2.2?

Ответ №1:

Решением было добавить следующий код в urls.py файл приложения:

 from django.conf import settings
from django.conf.urls.static import static
 

А затем добавить эту строку в urlpatterns массив:

 urlpatterns = [
...
]   static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)