У меня есть модель, для целей тестирования только с ImageField.Этот ImageField связан с FileSystemStorage следующим образом:
fs_test = FileSystemStorage(location = settings.FS_TEST_FILES,
base_url = settings.FS_TEST_URL)
class TestModel(models.Model):
image = models.ImageField(storage=fs_test,upload_to='image')
настройки выглядят так:
FS_TEST_FILES = os.path.normpath(MEDIA_ROOT+'/fs_test')
FS_TEST_URL = os.path.normpath(MEDIA_URL+'/fs_test/')
При загрузке файл загружается в «media / root / fs_test /изображение / filename.png».Не беспокойся, пока здесь.Но при вызове «image.url» я получаю «media / url / image / filename.png».Разве это не должно быть base_url + filename, которое в этом случае будет "media / url / fs-test / image / filename.png"?Почему бы и нет?
edit: Еще немного информации об этом.Класс Djangos FileField определяет доступ к URL следующим образом:
def _get_url(self):
self._require_file()
return self.storage.url(self.name)
url = property(_get_url)
, а класс Storage определяет:
def url(self, name):
if self.base_url is None:
raise ValueError("This file is not accessible via a URL.")
return urlparse.urljoin(self.base_url, name).replace('\\', '/')
, но мой код возвращает стандарт MEDIA_URL, а не base_url, определенный в fs_test.