Clo*_*ans 4 python django import
从Django - 导入django.conf.settings和导入设置之间的区别,我理解导入设置文件的可接受方式:
from django.conf import settings
Run Code Online (Sandbox Code Playgroud)
我还读过Python中的好或坏练习:在文件中间导入.其中一个答案将您带到http://mail.python.org/pipermail/python-list/2001-July/699176.html,其中第2点和第4点与我的问题相关.
假设我有一个巨大的settings.py,在我的Django代码中,我只需要在一个很少调用的方法中使用像MEDIA_ROOT这样的"低"常量.因此,导入整个settings.py似乎非常浪费:
from django.conf import settings
...
def foo():
my_media_root = settings.MEDIA_ROOT
Run Code Online (Sandbox Code Playgroud)
当我可以导入一个所需的常量:
from settings import MEDIA_ROOT
...
def foo():
my_media_root = MEDIA_ROOT
Run Code Online (Sandbox Code Playgroud)
因此,如果my_media_root仅用于该文件中的多个方法中的一个,则避免导入巨大的settings.py,尤其是因为它甚至可能永远不会被使用.当然,这是不好的做法,但这种"良好做法版本"不起作用:
from django.conf.settings import MEDIA_ROOT
...
def foo():
my_media_root = MEDIA_ROOT
Run Code Online (Sandbox Code Playgroud)
因为,按照设计,它会导致预期的ImportError: No module named settings例外.
所以,我的问题是,从大的settings.py导入一个常量的正确方法是什么?提前致谢.
Ned*_*der 14
如果这是一个Django项目,那么设置文件已经被导入,只需导入它并使用你想要的常量就不需要任何费用.在Python中多次导入模块只执行一次文件.
导入设置的常用方法:
from django.conf import settings
Run Code Online (Sandbox Code Playgroud)
这只是将module(settings)中的一个名称指定给现有已导入的设置对象的值.它相当于,并具有与以下相同的执行时间:
settings = sys.modules['django.conf'].settings
Run Code Online (Sandbox Code Playgroud)
您是否以简单的方式发现了问题?