如何在我的models.py中引用Django设置变量?


124

这是一个非常初学者的问题。但是我很沮丧。如何在model.py中引用Django设置变量?

NameError: name 'PRIVATE_DIR' is not defined

还尝试了很多其他东西,包括 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)

正确的方法是什么?


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

Answers:


275

试试这个:from django.conf import settings然后 settings.VARIABLE访问该变量。


16
相关的事项:如果settings_something.py由于一个项目在多个环境中部署而有多个实例,请不要尝试从导入app.settings。其他文件中的覆盖变量将无效。始终使用此答案中提到的导入。我花了几个小时才意识到我的项目正在发生什么。
Ev。

1
如果配置正确,此方法将起作用:使用环境变量DJANGO_SETTINGS_MODULE或manage.py命令行参数--settings = ..在文档中了解更多:docs.djangoproject.com/en/2.0/topics/settings
mirek

VAR应该是后者的资本,否则它将不起作用
Saurabh Chandra Patel

91
from django.conf import settings

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

它说的是None,如果变量未在设置中定义,则将放置默认值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.