내 로컬 머신은 Ubuntu 8.10에서 Python 2.5 및 Nginx를 실행 중이며 최신 개발 트렁크에서 Django가 빌드되었습니다.
내가 요청하는 모든 URL에 대해 다음을 throw합니다.
/ appname / path appname / template_name.html의 TemplateDoesNotExist
Django는 다음 순서로 이러한 템플릿을로드하려고 시도했습니다. * 로더 django.template.loaders.filesystem.function 사용 : * 로더 django.template.loaders.app_directories.function 사용 :
TEMPLATE_DIRS ( ‘/usr/lib/python2.5/site-packages/projectname/templates’,)
이 경우 /usr/lib/python2.5/site-packages/projectname/templates/appname/template_name.html 을 찾고 있습니까? 이상한 것은이 파일이 디스크에 존재한다는 것입니다. Django가 왜 그것을 찾을 수 없습니까?
그런 문제없이 Ubuntu 9.04에서 Python 2.6을 사용하여 원격 서버에서 동일한 응용 프로그램을 실행합니다. 다른 설정은 동일합니다.
로컬 컴퓨터에 잘못 구성된 것이 있습니까? 아니면 내가 조사해야 할 오류를 일으킬 수있는 것은 무엇입니까?
내에서 settings.py , 내가 지정한 :
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'),
)
다음 파일을 찾아야합니다.
- /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
- …
위의 모든 파일은 디스크에 존재합니다.
해결
내가 시도한 후에 지금 작동합니다.
chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*
이상하다. 원격 서버 에서이 작업을 수행 할 필요가 없습니다.
답변
첫 번째 해결책 :
이 설정
TEMPLATE_DIRS = (
os.path.join(SETTINGS_PATH, 'templates'),
)
Django는 templates/
프로젝트 아래의 디렉토리에서 템플릿을 볼 것임을 의미합니다 .
장고 프로젝트가 /usr/lib/python2.5/site-packages/projectname/
설정 에 있다고 가정하면 django는 아래에서 템플릿을 찾습니다./usr/lib/python2.5/site-packages/projectname/templates/
이 경우 템플릿을 다음과 같이 구성하도록 옮깁니다.
/usr/lib/python2.5/site-packages/projectname/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/templates/template3.html
두 번째 해결책 :
그래도 작동하지 않고 settings.py에 앱을 구성했다고 가정하면 다음과 같습니다.
INSTALLED_APPS = (
'appname1',
'appname2',
'appname3',
)
Django는 기본적으로 templates/
설치된 모든 앱의 디렉토리 아래에 템플릿을로드합니다 . 따라서 디렉토리 구조를 사용하여 템플릿을 다음과 같이 이동하려고합니다.
/usr/lib/python2.5/site-packages/projectname/appname1/templates/template1.html
/usr/lib/python2.5/site-packages/projectname/appname2/templates/template2.html
/usr/lib/python2.5/site-packages/projectname/appname3/templates/template3.html
SETTINGS_PATH
기본적으로 정의되어 있지 않을 수 있습니다. 이 경우 settings.py에서 정의하고 싶을 것입니다.
import os
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
답변
이 튜플을 찾으십시오.
import os
SETTINGS_PATH = os.path.dirname(os.path.dirname(__file__))
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
문자열을 ‘DIRS’에 추가해야합니다.
"os.path.join(SETTINGS_PATH, 'templates')"
그래서 당신은 모두 필요합니다 :
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(SETTINGS_PATH, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
답변
app
처음부터 추가 할 때이 문제가 발생하는 경우 아마 당신이 일부를 그리워하기 때문일 것입니다 settings
. 을 추가 할 때는 세 단계가 필요합니다 app
.
1, 디렉토리 및 템플릿 파일을 만듭니다.
라는 이름의 프로젝트가 있다고 가정 mysite
하고 당신이 추가 할 app
이름 your_app_name
. 템플릿 파일 mysite/your_app_name/templates/your_app_name
을 다음과 같이 넣으십시오 .
├── mysite
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── your_app_name
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── templates
│ │ └── your_app_name
│ │ └── my_index.html
│ ├── urls.py
│ └── views.py
2, 귀하의 추가 app
에를 INSTALLED_APPS
.
수정 settings.py
INSTALLED_APPS = [
...
'your_app_name',
...
]
3, 귀하의 추가 app
로 디렉토리 DIRS
에서 TEMPLATES
.
수정 settings.py
.
TEMPLATES = [
{
...
'DIRS': [os.path.join(BASE_DIR, 'templates'),
os.path.join(BASE_DIR, 'your_app_name', 'templates', 'your_app_name'),
...
]
}
]
답변
.py 설정에서 TEMPLATE_LOADERS 및 TEMPLATE DIRS를 제거한 다음 추가
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['/home/jay/apijay/templates',],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
답변
부끄러운 문제가있었습니다 …
서두르고 앱을에 넣는 것을 잊었 기 때문에이 오류가 발생했습니다 INSTALLED_APPS
. 장고가 더 설명적인 오류를 일으킬 것이라고 생각할 것입니다.
답변
직감이지만 Django 템플릿 로딩에 대한이 기사를 확인하십시오 . 특히, django.template.loaders.app_directories.Loader
TEMPLATE_LOADERS 목록에 있는지 확인하십시오 .
답변
ls -l을 사용하여 템플리트 및 appname 디렉토리에 대한 권한을 확인하거나 django에서 절대 경로 open ()을 시도하십시오.