Wie verweise ich auf eine Django-Einstellungsvariable in meiner models.py?


124

Dies ist eine sehr Anfängerfrage. Aber ich bin ratlos. Wie verweise ich auf eine Django-Einstellungsvariable in meiner model.py?

NameError: name 'PRIVATE_DIR' is not defined

Habe auch viele andere Sachen ausprobiert, darunter 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)

Was ist der richtige Weg, um dies zu tun?


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

Antworten:


272

Versuchen Sie Folgendes: from django.conf import settingsDann settings.VARIABLEgreifen Sie auf diese Variable zu.


16
Etwas Relevantes: Wenn Sie settings_something.pyaufgrund eines in mehreren Umgebungen bereitgestellten Projekts mehrere Instanzen haben, versuchen Sie nicht, aus zu importieren app.settings. Überschriebene Variablen in den anderen Dateien werden nicht wirksam. Verwenden Sie immer den in dieser Antwort genannten Import. Ich brauchte ein paar Stunden, um zu erkennen, was in meinem Projekt vor sich ging.
Ev.

1
Dies funktioniert, wenn es richtig konfiguriert ist: mit der Umgebungsvariablen DJANGO_SETTINGS_MODULE oder mit dem Befehlszeilenparameter manage.py --settings = .. Weitere Informationen finden Sie in den Dokumenten: docs.djangoproject.com/de/2.0/topics/settings
mirek

VAR sollte das letztere Kapital sein, sonst wird es nicht funktionieren
Saurabh Chandra Patel

91
from django.conf import settings

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

Wo es heißt None, geben Sie einen Standardwert ein, falls die Variable nicht in den Einstellungen definiert ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.