Obecnie pracuję w pliku Proj/gui/apps/dashboard/views.py. Chcę zaimportować plik, który jest obecny poza katalogiem Django, tj. Proj/services/constants/global_variables.py. Jak mam to zrobić?

Oto mój katalog projektu.

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
1
PythonEnthusiast 20 listopad 2013, 12:05

2 odpowiedzi

Najlepsza odpowiedź

Dodaj / proj / usługa do swojego sys.path, będzie dostępny pakiet constants. Znajdziesz tu więcej informacji: http: // Docs .Python.org / 2 / Tutorial / Modules.html # Moduł-Szukaj ścieżki

3
bruno desthuilliers 20 listopad 2013, 08:20

Dwie sugestie:

  1. Dodaj swoje zmienne globalne na settings.py; następnie:

    from django.conf import settings
    print(settings.SOME_VAR) # where SOME_VAR is from your global_variables.py
    

    Lub przesuń plik do tego samego katalogu jako settings.py, a następnie w dolnej części settings.py, dodaj:

    try:
        import global_variables as gv
    except ImportError:
        pass
    

    Następnie możesz:

    from django.conf import settings
    from django.core.exception import ImproperlyConfigured
    
    if hasattr(settings, 'gv'):
        print(settings.gv.SOME_VAR)
    else:
        raise ImproperlyConfigured
    
  2. Dodaj pełną ścieżkę katalogu modułu do sys.path; Ale jest to zniechęce, ponieważ Django zapewnia sposób posiadania własnego Ustawienia niestandardowe.


Myślę, że przykład byłby tutaj lepszy. Załóżmy, że chcesz mieć niestandardową zmienną MY_VAR i mieć go dostępne do projektu Django.

Po prostu dodaj go do settings.py, w dowolnym miejscu. Polecam na dole:

# normal settings.py template code
# ..
# Custom settings

MY_VAR = True

Teraz gdziekolwiek chcesz uzyskać dostęp do tej zmiennej, importuj pomocnik Ustawienia, podobnie jak to:

from django.conf import settings
from django.shortcuts import render

def my_view(request):
    return render(request, 'file.html', {'x': settings.MY_VAR})

Jeśli masz już wszystkie ustawienia w innym pliku Python, krok pierwszy jest do przenieś go do tej samej lokalizacji, co settings.py; Następnie możesz wykonać import "dzikiej karty" (nie zalecany), ani nie zaimportuj go z aliasem.

Więc jeśli masz

-- my_proj
   |-- __init__.py
   |-- settings.py
   |-- urls.py
   |-- wsgi.py
   |-- my_settings.py

Na dole settings.py napisałbyś ten fragment; który próbuje importować 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

Teraz można uzyskać dostęp do wszystkich nazw w my_settings.py przy użyciu:

from django.conf import settings
from django.shortcuts import render

def my_view(request):
    return render(request, 'file.html', {'x': settings.cs.MY_VAR})
1
Burhan Khalid 20 listopad 2013, 09:47