2013-08-17 53 views
0

我真的有问题,以正确设置TEMPLATE_DIR后搜索了一堆话题,并尝试各种事情。Django模板目录奇怪的行为

这里是我的项目设置:

#settings.py 
DEBUG = True 
TEMPLATE_DEBUG = DEBUG 
import os 
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__)) 

MEDIA_ROOT = '' 
MEDIA_URL = '' 

STATIC_ROOT = '' 
STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    PROJECT_PATH + '/static/', 
) 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
) 
TEMPLATE_DIRS = (
    PROJECT_PATH + '/TrainingBook/templates/', 
    PROJECT_PATH + '/RestClient/templates/', 
) 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'TrainingBook', 
) 

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.debug", 
    "django.core.context_processors.i18n", 
    "django.core.context_processors.media", 
    "django.core.context_processors.static", 
    # 'django.core.context_processors.request', 
    "TrainingBook.context_processors.global_context", 
) 
print PROJECT_PATH # /Users/Kuba/Development/University/RestClient 
print STATICFILES_DIRS # ('/Users/Kuba/Development/University/RestClient/static/',) 
print TEMPLATE_DIRS 
# ('/Users/Kuba/Development/University/RestClient/TrainingBook/templates/', 
# '/Users/Kuba/Development/University/RestClient/RestClient/templates/') 

我的项目结构:

$ pwd 
/Users/Kuba/Development/University/RestClient 
$ tree 
. 
├── RestClient 
│   ├── __init__.py 
│   ├── __init__.pyc 
│   ├── settings.pyc 
│   ├── templates 
│   │   ├── base.html 
│   │   ├── home.html 
│   │   └── login_form.html 
│   ├── urls.py 
│   ├── urls.pyc 
│   ├── wsgi.py 
│   └── wsgi.pyc 
├── TrainingBook 
│   ├── __init__.py 
│   ├── __init__.pyc 
│   ├── context_processors.py 
│   ├── context_processors.pyc 
│   ├── models.py 
│   ├── models.pyc 
│   ├── templates 
│   │   ├── friends.html 
│   │   ├── statistics.html 
│   │   └── workouts.html 
│   ├── tests.py 
│   ├── views.py 
│   └── views.pyc 
├── manage.py 
├── settings.py 
├── settings.pyc 
└── static 
    ├── css 
    │   ├── bootstrap-glyphicons.css 
    │   ├── bootstrap.css 
    │   ├── bootstrap.min.css 
    │   └── main.css 
    └── js 
     ├── bootstrap.js 
     ├── bootstrap.min.js 
     └── jquery-1.10.2.js 

我感动 “settings.py” 起来,以获得PROJECT_PATH设置一个等级至 “/ RESTClient实现/”而不是“/ RestClient/RestClient /”。

我还修改manage.py从

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "RestClient.settings") 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") 

当我运行服务器TemplateDoesNotExist上升,我看到了一些奇怪的事情:

Template-loader postmortem 

Django tried loading these templates, in this order: 
Using loader django.template.loaders.filesystem.Loader: 
/Users/Kuba/Development/University/RestClient/TrainingBook/templates/templates/home.html (File does not exist) 
/Users/Kuba/Development/University/RestClient/RestClient/templates/templates/home.html (File does not exist) 
Using loader django.template.loaders.app_directories.Loader: 
/Users/Kuba/.virtualenvs/client/lib/python2.7/site-packages/django/contrib/auth/templates/templates/home.html (File does not exist) 
/Users/Kuba/Development/University/RestClient/TrainingBook/templates/templates/home.html (File does not exist) 

,你可以看到有“/模板/模板”,即使我没有指定它。

在另一方面,如果我切换到TEMPLATE_DIRS:

TEMPLATE_DIRS = (
    PROJECT_PATH + '/TrainingBook/', 
    PROJECT_PATH + '/RestClient/', 
) 

TemplateDoesNotExist升起后,我可以看到,装载机在寻找模板:

/Users/Kuba/Development/University/RestClient/RestClient/home.html 
/Users/Kuba/Development/University/RestClient/TrainingBook/home.html 

我做了什么错?

编辑:问题是,我这样定义的一些看法:

class Home(Base): 
    template_name = 'templates/home.html' 
+0

只要注意'RestCelient'中的settings.pyc' dir - 如果删除它,该怎么办? – alecxe

+0

没有帮助,再加上它重新运行服务器后重新创建。 – koleS

+0

btw该文件将回来,如果进程获得写入权限。它的python编译文件... – Jingo

回答

1

您指定templates/home.html,而不是仅仅home.html

模板名称将附加到TEMPLATE_DIRS,所以/foo/templates/与TEMPLATE_DIRS将变为/foo/templates/templates/home.html如果templates/home.html是模板名称。相反,模板名称应该只是home.html,生成的模板路径将是/foo/templates/home.html,这是正确的。