Понимание полей изображения, MEDIA_ROOT & MEDIA URL - PullRequest
0 голосов
/ 01 сентября 2018

Построение ответа neverwalkaloner здесь, я попытался перенести атрибут модели моего изображения из CharField в ImageField и затем установить MEDIA ROOT & MEDIA URL в settings.py.

Мое понимание, чтение документации:

здесь (как Django обрабатывает файлы) ,

здесь (что означают MEDIA URL и MEDIA ROOT) ,

и здесь (что такое ImageField и его различные аргументы) , Django будет обрабатывать абсолютный путь к файлу конкретного ImageField на основе настроек upload_path &. Поэтому я проверил это в оболочке. Пока что это не работает.

ОБНОВЛЕНО ПОПЫТКА НА ПРОДУКТ *

В settings.py:

MEDIA_ROOT = BASE_DIR + '/project' + '/media/'
MEDIA_URL = '/media/'

In models.py:

from django.db import models

class Product(models.Model):
    sku = models.CharField(validators=[isalphanumeric], max_length=20, null=False, blank=False)
    image = models.ImageField(upload_to="products/" max_length=20, blank=False, null=False)

Тестирование в оболочке Python Django:

In  [1]: from app.models import Product
In  [2]: test_product = Product(sku='alphanumeric23', image='test_product.png')
In  [3]: test_product.image.path
Out [3]: 'C:\\Users\\user\\path\\to\\project\\project\\media\\test_product.png'

Но мой ожидаемый результат должен был быть:

'C:\\Users\\user\\path\\to\\project\\project\\media\\product\\test_product.png'

Почему я не получаю правильный URL-адрес?

Это потому, что технически не было загружено с помощью вызова test_product.save ()? Что я делаю не так?

1 Ответ

0 голосов
/ 01 сентября 2018

Вам не нужно добавлять max_length в ImageField. Если вам нужен правильный URL-адрес, вы можете установить код примерно так:

urls.py:

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

settings.py:

MEDIA_URL = "/media/"
MEDIA_ROOT = "/path/to/projectdirectory/media/"

some.html:

{{product.image.url}}

Выходной URL: https://hostname/media/products/image.jpg Вы также можете добавить upload_to= 'products/%Y/%m/%d' если вы хотите вывод как это:

https://hostname/media/products/year/month/date/image.jpg
...