目前,我正在使用档案Proj/gui/apps/dashboard/views.py
。我想导入一个存在于Django目录之外的文件,即Proj/services/constants/global_variables.py
。我该怎么做?
这是我的项目目录。
Proj
|-- gui
| |-- apps
| | | |-- dashboard
| | | |-- __init__.py
| | | |-- models.py
| | | |-- tests.py
| | | |-- views.py
| |-- gui
| | |-- __init__.py
| | |-- settings.py
| | |-- urls.py
| | `-- wsgi.py
| |-- manage.py
|-- service
|-- constants
| |-- device_parameters.json
| |-- global_variables.py
| |-- __init__.py
答案 0 :(得分:3)
向sys.path
添加/项目/服务,它会使constants
包可用。您可以在此处找到更多信息:http://docs.python.org/2/tutorial/modules.html#the-module-search-path
答案 1 :(得分:1)
两个建议:
将全局变量添加到settings.py
;然后:
from django.conf import settings
print(settings.SOME_VAR) # where SOME_VAR is from your global_variables.py
或者,将您的文件移至与settings.py
相同的目录,然后在settings.py
的底部添加:
try:
import global_variables as gv
except ImportError:
pass
然后,你可以这样做:
from django.conf import settings
from django.core.exception import ImproperlyConfigured
if hasattr(settings, 'gv'):
print(settings.gv.SOME_VAR)
else:
raise ImproperlyConfigured
将模块目录的完整路径添加到sys.path
;但这是不鼓励的,因为django提供了一种拥有自己custom settings的方式。
我认为这里的例子会更好。假设您想要一个自定义变量MY_VAR
并将其用于您的django项目。
只需将其添加到settings.py
,随时随地。我建议在底部:
# normal settings.py template code
# ..
# Custom settings
MY_VAR = True
现在,您想要访问该变量的任何地方,请导入设置助手,如下所示:
from django.conf import settings
from django.shortcuts import render
def my_view(request):
return render(request, 'file.html', {'x': settings.MY_VAR})
如果您已将所有设置放在另一个python文件中,则第一步是将其移动到与settings.py
相同的位置;然后你可以进行“外卡”导入(不推荐),或者用别名导入它。
所以,如果你有
-- my_proj
|-- __init__.py
|-- settings.py
|-- urls.py
|-- wsgi.py
|-- my_settings.py
在settings.py
的底部你会写这个片段;试图导入my_settings.py
:
try:
import my_settings as cs # cs = custom settings, but this can be anything
except ImportError:
pass # silently fail if the file cannot be found
现在,可以使用以下方式访问my_settings.py
中的所有名称:
from django.conf import settings
from django.shortcuts import render
def my_view(request):
return render(request, 'file.html', {'x': settings.cs.MY_VAR})