如何从Django目录外部访问文件

时间:2013-11-20 08:05:39

标签: python django

目前,我正在使用档案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

2 个答案:

答案 0 :(得分:3)

sys.path添加/项目/服务,它会使constants包可用。您可以在此处找到更多信息:http://docs.python.org/2/tutorial/modules.html#the-module-search-path

答案 1 :(得分: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
    
  2. 模块目录的完整路径添加到sys.path;但这是不鼓励的,因为django提供了一种拥有自己custom settings的方式。


  3. 我认为这里的例子会更好。假设您想要一个自定义变量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})