¿Cómo hago referencia a una variable de configuración de Django en mi models.py?


124

Esta es una pregunta muy para principiantes. Pero estoy perplejo. ¿Cómo hago referencia a una variable de configuración de Django en mi model.py?

NameError: name 'PRIVATE_DIR' is not defined

También probé muchas otras cosas, incluidas settings.PRIVATE_DIR

settings.py:

PRIVATE_DIR = '/home/me/django_projects/myproject/storage_dir'

modelos.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)

¿Cuál es la forma correcta de hacer esto?


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

Respuestas:


275

Pruebe con esto: from django.conf import settingsluego settings.VARIABLEpara acceder a esa variable.


16
Algo relevante: si tienes varias instancias de settings_something.pydebido a un proyecto implementado en varios entornos, no intentes importar desde app.settings. Las variables sobrescritas en los otros archivos no tendrán efecto. Utilice siempre la importación mencionada en esta respuesta. Me tomó unas horas darme cuenta de lo que estaba pasando en mi proyecto.
Ev.

1
Esto funciona, si está configurado correctamente: con la variable de entorno DJANGO_SETTINGS_MODULE o con el parámetro de línea de comando manage.py --settings = .. Leer más en docs: docs.djangoproject.com/en/2.0/topics/settings
mirek

El VAR debería ser el último en mayúsculas, de lo contrario no funcionará
Saurabh Chandra Patel

91
from django.conf import settings

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

Donde dice None, pondrá un valor predeterminado en caso de que la variable no esté definida en la configuración.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.