Как установить статический корень и медиа-корень, чтобы используемый путь не был жестко закодирован?
В моем settings.py файл как STATIC_ROOT, так и MEDIA_ROOT в настоящее время указывают на жестко закодированное местоположение. Например, путь STATIC_ROOT таков:
/home/ian/projectname/mysite/appname/static
Я знаю, что это вызовет проблемы при развертывании моего проекта.
Оглядываясь вокруг, я вижу, что мне нужно использовать os.path, но бесчисленные примеры просто смутили меня.
Я попытался просмотреть различные перестановки установки этого файла (или получение значения примера, используемого для установки BASE_DIR), однако в качестве снимка экрана показывает, что мне чего-то не хватает, потому что он жалуется на значение file.
В случае необходимости я использую Django 1.6
Заранее благодарю.

2 ответа:
Во-первых, вы получаете эту ошибку в результате добавления
__file__в интерактивную оболочку:NameError: name '__file__' is not definedОболочка не определяет текущий путь к файлу в
__file__, поскольку он относится к вашемуfilepath, в который вы добавили эту строку. Для работы, например, вам нужно будет включить это вfile.py:os.path.join(os.path.dirname(__file__))Затем выполните это из командной строки:
python file.pyЭто потому, что
__file__относится к тому, чтоfilepathизfile.pyесть.В случае
settings.py, используйте это, чтобы получить корневой каталог вашего проекта Django:BASE_DIR = os.path.dirname(os.path.dirname(__file__))Затем можно использовать
os.path.join()для объединения других относительных путей, таких как:STATIC_ROOT = os.path.join(BASE_DIR, 'static') TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')Для получения дополнительной информации о том, как разместить каталог проекта Django, прочитайте следующее: общие структуры
Обычная практика (предложенная в официальном учебнике django также) состоит в том, чтобы иметь настройку
BASE_DIR, которая получает текущий рабочий каталог из__file__:BASE_DIR = os.path.dirname(os.path.abspath(__file__))Затем с помощью
os.path.join()строятся другие относительные пути, например:STATIC_ROOT = os.path.join(BASE_DIR, 'static')Обратите внимание, что
__file__доступен только для модуля, нет смысла использовать его на консоли.