#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)