Na mojej lokalnej maszynie działa Python 2.5 i Nginx na Ubuntu 8.10, z Django zbudowanym z najnowszego pnia rozwojowego.
Dla każdego żądanego adresu URL generuje:
TemplateDoesNotExist w / nazwa_aplikacji / ścieżka nazwa_aplikacji / nazwa_szablonu.html
Django próbował załadować te szablony w następującej kolejności: * Używając programu ładującego django.template.loaders.filesystem.function: * Używając programu ładującego django.template.loaders.app_directories.function:
TEMPLATE_DIRS ('/usr/lib/python2.5/site-packages/projectname/templates',)
Czy w tym przypadku szuka /usr/lib/python2.5/site-packages/projectname/templates/appname/template_name.html ? Dziwne jest to, że ten plik istnieje na dysku. Dlaczego Django nie może go zlokalizować?
Uruchamiam tę samą aplikację na zdalnym serwerze z Pythonem 2.6 na Ubuntu 9.04 bez takiego problemu. Pozostałe ustawienia są takie same.
Czy jest coś źle skonfigurowanego na moim komputerze lokalnym lub co mogło spowodować takie błędy, które powinienem sprawdzić?
W moim settings.py określiłem:
SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
# Find templates in the same folder as settings.py.
TEMPLATE_DIRS = (
os.path.join(SETTINGS_PATH, 'templates'),
)
Powinien szukać następujących plików:
- /usr/lib/python2.5/site-packages/projectname/templates/appname1/template1.html
- /usr/lib/python2.5/site-packages/projectname/templates/appname1/template2.html
- /usr/lib/python2.5/site-packages/projectname/templates/appname2/template3.html
- ...
Wszystkie powyższe pliki znajdują się na dysku.
Rozwiązany
Działa teraz, gdy spróbowałem:
chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*
To dziwne. Nie muszę tego robić na serwerze zdalnym, żeby to działało.
Odpowiedzi:
Pierwsze rozwiązanie :
Te ustawienia
oznacza, że Django będzie przeglądać szablony z
templates/
katalogu w twoim projekcie.Zakładając, że twój projekt Django znajduje się w
/usr/lib/python2.5/site-packages/projectname/
tym miejscu z twoimi ustawieniami, django będzie szukał szablonów pod/usr/lib/python2.5/site-packages/projectname/templates/
W takim przypadku chcemy przenieść nasze szablony, aby miały następującą strukturę:
Drugie rozwiązanie :
Jeśli to nadal nie działa i zakładając, że masz aplikacje skonfigurowane w settings.py w ten sposób:
Domyślnie Django ładuje szablony w
templates/
katalogu w każdej zainstalowanej aplikacji. W związku z twoją strukturą katalogów chcemy przenieść nasze szablony, aby wyglądały tak:SETTINGS_PATH
nie mogą być zdefiniowane domyślnie. W takim przypadku będziesz chciał to zdefiniować (w settings.py):źródło
/usr/lib/python2.5/site-packages/projectname/
?templates
nie jest dobrym projektem. Ale, jak wiem, po dodaniu twojegoAPP_NAME
wsettings.py
,django
może przejść do przeszukiwania szablonu aplikacji w katalogu, który znajduje się wAPP_DIR
. W ten sposób możesz oddzielić szablon dla różnych aplikacji. (Django 1.7 - .1.9Znajdź tę krotkę:
Musisz dodać ciąg do „DIRS”
W sumie potrzebujesz:
źródło
SETTINGS_PATH
nie jest nigdzie zdefiniowana, więc nie sądzę, aby ta odpowiedź zadziałała. Może miałeś na myśliBASE_DIR
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
, nie plikJeśli napotkasz ten problem podczas dodawania pliku
app
od podstaw. Prawdopodobnie dlatego, że za niektórymi tęskniszsettings
. Podczas dodawania plikuapp
.1 、 Utwórz katalog i plik szablonu.
Załóżmy, że masz projekt o nazwie
mysite
i chcesz dodaćapp
nazwany plikyour_app_name
. Umieść swój plik szablonu poniżejmysite/your_app_name/templates/your_app_name
.2, dodaj
app
doINSTALLED_APPS
.Modyfikować
settings.py
3, Dodaj swój
app
katalog doDIRS
wTEMPLATES
.Modyfikuj
settings.py
.źródło
W ustawieniu .py usuń TEMPLATE_LOADERS i TEMPLATE DIRS Następnie ADD
źródło
Miałem kłopotliwy problem ...
Wystąpił ten błąd, ponieważ spieszyłem się i zapomniałem zainstalować aplikację
INSTALLED_APPS
. Można by pomyśleć, że Django spowodowałoby bardziej opisowy błąd.źródło
Tylko przeczucie, ale przeczytaj ten artykuł na temat ładowania szablonu Django . W szczególności upewnij się, że masz
django.template.loaders.app_directories.Loader
na swojej liście TEMPLATE_LOADERS.źródło
Sprawdź uprawnienia do szablonów i katalogów appname, używając ls -l lub spróbuj wykonać bezwzględną ścieżkę open () z django.
źródło
Działa teraz, gdy spróbowałem
To dziwne. Nie muszę tego robić na serwerze zdalnym, aby to działało.
Muszę również uruchomić następujące polecenie na komputerze lokalnym, aby uzyskać dostęp do wszystkich plików statycznych, ale na serwerze zdalnym wszystkie są „root: root”.
Lokalna maszyna działa w wersji desktopowej Ubuntu 8.04. Serwer zdalny działa w wersji serwerowej Ubuntu 9.04.
Czy ktoś wie, dlaczego?
źródło
Dodałem do wersji 1.9 django
linia do bloku Szablony w settings.py I działało dobrze
źródło
TemplateDoesNotExist
Błąd Django oznacza po prostu, że framework nie może znaleźć pliku szablonu.Aby użyć interfejsu API do ładowania szablonów, musisz poinformować platformę, w której przechowujesz szablony. Miejsce, w którym można to zrobić, znajduje się w pliku ustawień (
settings.py
) przezTEMPLATE_DIRS
ustawienie. Domyślnie jest to pusta krotka, więc to ustawienie mówi mechanizmowi ładowania szablonów Django, gdzie szukać szablonów.Wybierz katalog, w którym chcesz przechowywać swoje szablony i dodaj go do TEMPLATE_DIRS, np .:
źródło
Zobacz, który folder django próbuje załadować szablon, spójrz na
Template-loader postmortem
stronę błędu, na przykład błąd będzie wyglądał następująco:W moim błędzie
vcsrc\vcsrc\templates\base.html
nie na ścieżce.Następnie zmień
TEMPLATES
wsetting.py
pliku na ścieżkę szablonówźródło
Muszę używać szablonów dla wewnętrznej aplikacji i działa dla mnie:
źródło
Upewnij się, że dodaliśmy swoją aplikację do
project-name/app-namme/settings.py
INSTALLED_APPS: .I
project-name/app-namme/settings.py
szablony: .źródło
Sprawdź, czy Twoje szablony.html są w
/usr/lib/python2.5/site-packages/projectname/templates
katalogu.źródło
Cześć, znalazłem nowe rozwiązanie. Właściwie jest zdefiniowany w innym szablonie, więc zamiast samodzielnie definiować TEMPLATE_DIRS, umieść nazwę ścieżki katalogu w ich:
źródło
Wstyd mi to przyznać, ale problemem było to, że szablon został określony jako
….hml
zamiast….html
. Uważaj!źródło
Dodałem to
i nadal pokazywał błąd, potem zdałem sobie sprawę, że w innym projekcie szablony pokazywały się bez dodawania tego kodu w pliku settings.py, więc sprawdziłem ten projekt i zdałem sobie sprawę, że nie stworzyłem wirtualnego środowiska w tym projekcie, więc zrobiłem
i zadziałało, nie wiem dlaczego
źródło
Wpadłem na ten problem. Oto jak to rozwiązałem:
Spójrz na swój settings.py, zlokalizuj
TEMPLATES
zmienną, wewnątrz SZABLONÓW, dodaj ścieżkę do szablonów wewnątrzDIRS
listy. Dla mnie, po pierwsze mogę ustawić ścieżkę jako szablonyTEMPLATES_PATH = os.path.join(BASE_DIR,'templates')
, a następnie dodaćTEMPLATES_PATH
doDIRS
listy'DIRS':[TEMPLATES_PATH,]
. Następnie zrestartuj serwer, wyjątek TemplateDoesNotExist zniknął. Otóż to.źródło
w swoim
setting.py
pliku zamieńDIRS
wTEMPLATES
tablicy na thisdo tego
ale myślę, że musisz wiedzieć, że musisz utworzyć folder o nazwie
templates
i powinien znajdować się w ścieżce głównej, w przeciwnym razie musisz zmienićDIRS
wartośćźródło
1. utwórz folder „szablony” w „aplikacji” (powiedzmy, że tak nazwałeś swoją aplikację) i możesz umieścić tutaj plik HTML. Jednak zdecydowanie zaleca się utworzenie folderu o tej samej nazwie („aplikacja”) w folderze „szablony” i dopiero wtedy umieszczenie w nim plików html. Do folderu „app / templates / app”
2. teraz w adresie urls.py 'app' umieść:
3. w pliku views.py aplikacji:
źródło