Comment référencer une variable de paramètres Django dans mon models.py?


124

C'est une question très débutante. Mais je suis perplexe. Comment référencer une variable de paramètres Django dans mon model.py?

NameError: name 'PRIVATE_DIR' is not defined

J'ai également essayé beaucoup d'autres choses, y compris 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)

Quelle est la bonne façon de procéder?


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

Réponses:


275

Essayez avec ceci: from django.conf import settingspuis settings.VARIABLEpour accéder à cette variable.


16
Quelque chose de pertinent: si vous avez plusieurs instances de en settings_something.pyraison d'un projet déployé dans plusieurs environnements, n'essayez pas d'importer depuis app.settings. Les variables écrasées dans les autres fichiers ne prendront pas effet. Utilisez toujours l'importation mentionnée dans cette réponse. Il m'a fallu quelques heures pour réaliser ce qui se passait dans mon projet.
Ev.

1
Cela fonctionne, s'il est correctement configuré: avec la variable d'environnement DJANGO_SETTINGS_MODULE ou avec le paramètre de ligne de commande manage.py --settings = .. Pour en savoir plus, consultez la
mirek

VAR devrait être plus tard, sinon cela ne fonctionnera pas
Saurabh Chandra Patel

91
from django.conf import settings

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

Là où il est indiqué None, vous mettrez une valeur par défaut au cas où la variable n'est pas définie dans les paramètres.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.