Jak odwołać się do zmiennej ustawień Django w pliku models.py?


124

To bardzo początkowe pytanie. Ale jestem zaskoczony. Jak odwołać się do zmiennej ustawień Django w pliku model.py?

NameError: name 'PRIVATE_DIR' is not defined

Próbowałem też wielu innych rzeczy, w tym 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)

Jak to zrobić we właściwy sposób?


7
from django.conf import settings- docs.djangoproject.com/en/dev/topics/settings/ ...
wkl

Odpowiedzi:


275

Spróbuj z tym: from django.conf import settingsnastępnie, settings.VARIABLEaby uzyskać dostęp do tej zmiennej.


16
Coś istotnego: jeśli masz kilka wystąpień z settings_something.pypowodu projektu wdrożonego w kilku środowiskach, nie próbuj importować z app.settings. Zastąpione zmienne w innych plikach nie przyniosą efektu. Zawsze używaj importu wymienionego w tej odpowiedzi. Zajęło mi kilka godzin, zanim zdałem sobie sprawę, co się dzieje w moim projekcie.
Ev.

1
Działa to, jeśli jest odpowiednio skonfigurowane: ze zmienną środowiskową DJANGO_SETTINGS_MODULE lub z parametrem wiersza poleceń manage.py --settings = .. Przeczytaj więcej w docs: docs.djangoproject.com/en/2.0/topics/settings
mirek

VAR powinien być późniejszy kapitałowy, w przeciwnym razie nie zadziała
Saurabh Chandra Patel

91
from django.conf import settings

PRIVATE_DIR = getattr(settings, "PRIVATE_DIR", None)

Tam, gdzie jest napisane None, wstawisz wartość domyślną, jeśli zmienna nie jest zdefiniowana w ustawieniach.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.