2010-04-27 18 views

Odpowiedz

11

Jest to możliwe. Django jest dość dobry w byciu prostym pythonem bez dużej magii, więc zazwyczaj możesz oddzielić rzeczy. Widoki są po prostu funkcjami i można je wywoływać z dowolnego innego kodu Pythona.

Aby użyć ORM, musisz skonfigurować środowisko django w swoim skrypcie. Patrząc na „manage.py” pliku pokazuje jak to zrobić:

from django.core.management import setup_environ 
import settings 
setup_environ(settings) 

Teraz można nazwać cokolwiek widok chcesz:

from myapp.views import some_view 

some_view(...) 

Należy pamiętać, że konwencja jest do wglądu do funkcji podejmij obiekt HttpRequest jako swój pierwszy parametr i zwróć obiekt HttpResponse. Można zbudować obiekt żądania siebie:

from django.http import HttpRequest 

result = some_view(HttpRequest(), ...) 

Ale jeśli naprawdę nie są zainteresowane wykorzystaniem httpResponse lub HttpRequest obiektów, być może po prostu nie powinno nazywać swoje metody „Widoki”. Może to "utils" lub coś innego. Żadne z nich nie jest wymuszane przez Django, ale dobrze jest postępować zgodnie z konwencją, aby inni programiści mogli przeczytać twój kod.

Edytuj: 2010-05-24: Naprawiono "setup_environ" (błędnie miał wcześniej "execute_manager"). Reference.

+2

Jest to przydatne. Dziękuję Ci. To naprawdę powinno być zawarte w książce Django lub coś podobnego. Próbowałem dowiedzieć się, jak skorzystać z API modeli, aby załadować niektóre dane do DB łatwo, i to jest dokładnie to, czego potrzebowałem. Dzięki jeszcze raz. – CMaury

+0

Witam, mam błąd: 'from django.core.management import setup_environ ImportError: nie można zaimportować nazwy setup_environ' – jeff

1

W Django 1.6, można to zrobić po prostu umieszczając katalog projektu w ścieżce, a następnie ustawić zmienną środowiskową DJANGO_SETTINGS_MODULE jak pokazano poniżej:

import sys 
import os 

sys.path.append(path_to_the_project_dir) 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings') 

Następnie można rozpocząć importowanie modeli.

0

W Django 1.7, trzeba także zrobić:

import sys 
import os 

sys.path.append(path_to_the_project_dir) 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings') 

import django 
django.setup() 

przeciwnym razie będzie hit wyjątek AppRegistryNotReady.

Powiązane problemy