Come faccio a fare riferimento a una variabile delle impostazioni Django nel mio models.py?


124

Questa è una domanda molto per principianti. Ma sono perplesso. Come faccio a fare riferimento a una variabile delle impostazioni Django nel mio model.py?

NameError: name 'PRIVATE_DIR' is not defined

Ho anche provato molte altre cose tra cui 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)

Qual è il modo corretto per farlo?


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

Risposte:


275

Prova con questo: from django.conf import settingsquindi settings.VARIABLEper accedere a quella variabile.


16
Qualcosa di rilevante: se hai diverse istanze di a settings_something.pycausa di un progetto distribuito in diversi ambienti, non provare a importare da app.settings. Le variabili sovrascritte negli altri file non avranno effetto. Usa sempre l'importazione menzionata in questa risposta. Mi ci sono volute alcune ore per realizzare cosa stava succedendo nel mio progetto.
Ev.

1
Funziona, se configurato correttamente: con la variabile d'ambiente DJANGO_SETTINGS_MODULE o con il parametro della riga di comando manage.py --settings = .. Leggi di più in docs: docs.djangoproject.com/en/2.0/topics/settings
mirek

VAR dovrebbe essere la seconda maiuscola altrimenti non funzionerà
Saurabh Chandra Patel

91
from django.conf import settings

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

Dove dice None, inserirai un valore predefinito nel caso in cui la variabile non sia definita nelle impostazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.