Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导入单个Django设置常量以避免全部设置导入开销的正确方法?_Python_Django_Import - Fatal编程技术网

Python 导入单个Django设置常量以避免全部设置导入开销的正确方法?

Python 导入单个Django设置常量以避免全部设置导入开销的正确方法?,python,django,import,Python,Django,Import,从中,我了解了导入设置文件的公认方法: from django.conf import settings 我也读过。这里的一个答案是,第2点和第4点与我的问题相关 假设我有一个巨大的settings.py,在我的Django代码中,我只需要在一个很少调用的方法中使用一个“低级”常量,比如MEDIA_ROOT。因此,导入整个settings.py似乎非常浪费: from django.conf import settings ... def foo(): my_media_root =

从中,我了解了导入设置文件的公认方法:

from django.conf import settings
我也读过。这里的一个答案是,第2点和第4点与我的问题相关

假设我有一个巨大的settings.py,在我的Django代码中,我只需要在一个很少调用的方法中使用一个“低级”常量,比如MEDIA_ROOT。因此,导入整个settings.py似乎非常浪费:

from django.conf import settings
...
def foo():
    my_media_root = settings.MEDIA_ROOT
当我可以导入所需的常数时:

from settings import MEDIA_ROOT
...
def foo():
    my_media_root = MEDIA_ROOT
因此,请避免导入庞大的settings.py,特别是因为如果my_media_root仅用于该文件中许多方法中的一种,则可能永远不会使用它。当然,这是不好的做法,但这种做法的“良好做法版本”不起作用:

from django.conf.settings import MEDIA_ROOT
...
def foo():
    my_media_root = MEDIA_ROOT
因为,根据设计,它会导致预期的
ImportError:No module named settings
异常


所以,我的问题是,从大型settings.py导入一个常量的正确方法是什么?提前感谢。

如果这是一个Django项目,那么设置文件已经导入,只需导入并使用所需的常量,就不需要花费任何费用。在Python中多次导入模块只会执行一次文件

导入设置的常用方法:

from django.conf import settings
这只是将模块中的一个名称(
设置
)分配给现有已导入设置对象的值。它相当于,并且执行时间与:

settings = sys.modules['django.conf'].settings

你发现用简单的方法做这件事有问题吗?

是的。否则,大量过早优化。