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

194

这是一个非常初级的问题。但是我陷入了困境。如何在我的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)

应该如何正确地做这件事呢?


10
从django.conf中导入settings模块 - https://docs.djangoproject.com/en/dev/topics/settings/#using-settings-in-python-code - wkl
3个回答

434

尝试使用以下代码:from django.conf import settings,然后使用settings.VARIABLE来访问该变量。

VARIABLE应以大写字母表示,否则将无法正常工作。


29
如果您因为在多个环境中部署了一个项目而拥有了几个 settings_something.py 的实例,请不要尝试从 app.settings 导入。在其他文件中覆盖的变量将不会生效。请始终使用本答案中提到的导入方式。在我的项目中花费了几个小时才意识到发生了什么。 - Ev.
1
只要正确配置了环境变量DJANGO_SETTINGS_MODULE或使用manage.py命令行参数--settings=,这就能够正常工作。请在文档中查看更多信息:https://docs.djangoproject.com/en/2.0/topics/settings/ - mirek
3
如果VAR不是大写字母,它将无法工作。 - Saurabh Chandra Patel
2
谢谢。花了很多时间才弄清楚。 :) - ajinzrathod

130
from django.conf import settings

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

当代码中出现None时,您需要设置一个默认值,以防在设置中未定义该变量。


4

这里有一个导入EMAIL_HOST_USER并从settings.py文件中使用它发送电子邮件的示例:

from django.conf import settings
from django.core.mail import send_mail

def post_share(request, post_id): 
   # ...
   send_mail(subject, message, settings.EMAIL_HOST_USER, [
                      settings.EMAIL_HOST_USER, 'ahmnouira@gmail.com'])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接