Почему я получаю абсолютные URL-адреса в Satchmo, когда загружаю изображения продукта локально?
-
06-09-2019 - |
Вопрос
Я занимаюсь кое-какой локальной разработкой, используя Django и Satchmo.Когда я загружаю изображения продукта локально через администратора, путь к изображению отображается как абсолютный путь с указанием буквы диска, а не как правильный относительный путь.
Что еще более странно, Satchmo сохраняет как исходное изображение, так и созданные им миниатюры в обоих ме /media/
каталог и /media/images/
каталог, последний из которых находится там, где я хотеть их, чтобы уйти.
Настройки relavent следующие:
# path relative to the settings.py file
DIRNAME = os.path.abspath(os.path.dirname(__file__).decode('utf-8'))
MEDIA_ROOT = os.path.join(DIRNAME, 'media')
MEDIA_URL = 'http://localhost:8000/'
ADMIN_MEDIA_PREFIX = '/media/'
Я трижды проверил файл local_settings.py и нигде в нем нет упоминания слова "медиа", поэтому я уверен, что переопределений настроек нет.
Если это поможет, я использую Windows, но я использую все надлежащие обозначения unix для своих путей.
Решение 2
Оказывается, проблема заключается в проблеме с указаниями косой черты в файле settings.py.
Обычно я создаю relative_path()
функции в моем файле settings.py, чтобы я мог легко установить:
MEDIA_ROOT = absolute_path('media')
Версия Satchmo, которую я использовал, поощряла использование параметра DIRNAME вместо этого:
DIRNAME = os.path.abspath(os.path.dirname(__file__).decode('utf-8')
Проблема заключалась в том, что при использовании этой техники мой MEDIA_ROOT устанавливался как таковой:
MEDIA_ROOT = os.path.join(DIRNAME, 'media')
Но при этом использовались обратные косые черты Windows вместо косых черт Unix в прямом направлении.Я решил это с помощью:
MEDIA_ROOT = os.path.join(DIRNAME, 'media').replace('\\', '/')
Другие советы
Это ошибка только для Windows.Я разрабатываю приложение Satchmo для Windows, и оно делает это, но когда я развертываю его на Linux box, оно работает просто отлично.Я просто захожу в базу данных и редактирую пути там, когда провожу тестирование в своем окне Windows.