Как избежать предоставления адреса сервера при доступе к URL-адресу ImageField - PullRequest
0 голосов
/ 01 июня 2019

Я создал модель - Профиль - которая представляет профиль пользователя.У меня есть одно поле - models.ImageFiled, и у меня есть метод, чтобы получить абсолютную ссылку на это изображение.У меня есть сервер в роли разработчика, поэтому я открыл папку / media.Когда я использую полный URL-адрес сервера, это работает.Есть ли способ, чтобы избежать поставить статический адрес веб-сервера?

# Profile 
class Profile(models.Model):

    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    date_of_birth = models.DateField(blank=True, null=True)
    photo = models.ImageField(upload_to='users/%Y/%m/%d',blank=True)

    def __str__(self):
        return 'Profile for user {}'.format(self.user.username)

    @property
    def get_absolute_image_url(self):
        return "http://127.0.0.1:8000/{0}".format(self.photo.url)

in settings.py
MEDIA_URL = 'media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media/')

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

После некоторых копаний я нашел решение. Он основан на двух вещах:

1) URL-адрес носителя должен находиться внутри статического каталога, чтобы его можно было отобразить. 2) Загруженный носитель должен находиться внутри статического каталога.

Мой файл settings.py выглядит следующим образом:

STATIC_URL = '/static/'
MEDIA_URL = '/static/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "shop", "static", "media")

Справка пришла отсюда [ссылка] Различия между STATICFILES_DIR, STATIC_ROOT и MEDIA_ROOT

0 голосов
/ 01 июня 2019

Вам нужен абсолютный путь с косой чертой:

MEDIA_URL = '/media/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...