#django #django-models #django-settings
#django #django-модели #django-настройки
Вопрос:
Это вопрос для начинающих. Но я в тупике. Как мне ссылаться на переменную настроек Django в моем model.py ?
NameError: name 'PRIVATE_DIR' is not defined
Также пробовал много других вещей, в том числе settings.PRIVATE_DIR
settings.py:
PRIVATE_DIR = '/home/me/django_projects/myproject/storage_dir'
models.py:
# Problem is here.
from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location=PRIVATE_DIR)
class Customer(models.Model):
lastName = models.CharField(max_length=20)
firstName = models.CharField(max_length=20)
image = models.ImageField(storage=fs, upload_to='photos', blank=True, null=True)
Каков правильный способ сделать это?
Комментарии:
1.
from django.conf import settings
— docs.djangoproject.com/en/dev/topics/settings /…
Ответ №1:
Попробуйте с этим: from django.conf import settings
затем settings.VARIABLE
получить доступ к этой переменной.
ПЕРЕМЕННАЯ должна быть написана заглавной буквой. Иначе это не сработает.
Комментарии:
1. Что-то важное: если у вас есть несколько экземпляров
settings_something.py
due to проекта, развернутого в нескольких средах, не пытайтесь импортировать изapp.settings
. Перезаписанные переменные в других файлах не вступят в силу. Всегда используйте импорт, упомянутый в этом ответе. Мне потребовалось несколько часов, чтобы понять, что происходит в моем проекте.2. Это работает, если оно правильно настроено: с переменной среды DJANGO_SETTINGS_MODULE или с manage.py параметр командной строки —настройки=.. Подробнее читайте в документах: docs.djangoproject.com/en/2.0/topics/settings
3. VAR должен быть прописным последним, иначе он не будет работать
4. Спасибо. Потребовалось много времени, чтобы разобраться в этом.
![]()
Ответ №2:
from django.conf import settings
PRIVATE_DIR = getattr(settings, "PRIVATE_DIR", None)
Там, где указано None
, вы будете указывать значение по умолчанию, если переменная не определена в настройках.