Вернуть правильный адрес статического файла в Django - PullRequest
0 голосов
/ 27 июня 2018

model.py:

class Album(models.Model):{
    poster = models.ImageField upload_to='static/images/album/%Y/%m/%d')
}

serializer.py

class AlbumSerializer(serializers.ModelSerializer):
doc = DoctorSerializer()

class Meta:
    model = Album
    fields = '__all__'

setting.py

STATIC_URL = '/static/'
STATICFILES_DIRS=[ 
    os.path.join(BASE_DIR,'static')
]

views.py

class index(viewsets.ModelViewSet):
    serializer_class = AlbumSerializer    
    queryset = Album.objects.all()

Когда я загружаю изображение в http://127.0.0.1:8008/admin/qa/album/,, оно отображается как «static / images / album / 2018/06/27 / xxxxxx.jpg» в поле постера в базе данных. И я могу получить доступ к изображению через http://127.0.0.1:8008/static/images/album/2018/06/27/xxxxxx.jpg.

Однако в индексном представлении API Django Rest Framework возвращает URL-адрес изображения в виде: http://127.0.0.1:8008/api/index/static/images/album/2018/06/27/xxxxxx.jpg,, которые делают изображение 404.

Почему / api / index / был добавлен в URL? Что не так с моей настройкой? Нужна ваша помощь ...

1 Ответ

0 голосов
/ 27 июня 2018

Для подачи медиафайлов необходимо добавить MEDIA_URL и MEDIA_ROOT в настройки:

MEDIA_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR,'static')

Обратите внимание: если вы установили каталог static с параметром MEDIA_ROOT в пути upload_to, вы можете пропустить static:

poster = models.ImageField(upload_to='images/album/%Y/%m/%d')

В urls.py:

from django.conf import settings

urlpatterns = [
    # your urls here
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

UPD

Как сказал @brunodesthuilliers в комментарии, вам лучше разделить медиа и статические файлы и использовать media url и каталог вместо static:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'medial')
...