2013-05-31 107 views
1

我的Django应用程序的结构如下TemplateDoesNotExist

home/damon/dev/me/myproject/ 
         manage.py 
         /mytracker/ 
            __init__.py 
            settings.py 
            urls.py 
            /monitor/ 
              /media/ 

         /mymonitor/ 
            __init__.py 
            models.py 
            views.py 
            urls.py 
            /templates/ 
               base.html 
               home.html 

在我的.bashrc设置PYTHONPATH/home/damon/dev/me/myproject/

和settings.py中添加MEDIA_ROOT和template_dir模板

MEDIA_ROOT = 'home/damon/dev/me/myproject/mytracker/monitor/media' 

MEDIA_URL = '/site_media/' 

TEMPLATE_DIRS = (
       'home/damon/dev/me/myproject/mymonitor/templates' 
       ) 
这些值

mytracker.urls.py有

url(r'',include('mymonitor.urls')), 
    url(r'^site_media/(?P<path>.*)$','django.views.static.serve',{'document_root':settings.MEDIA_ROOT}), 

而mymonitor.urls.py有

... 
url(r'^$','mymonitor.views.home', 
        {'template_name':'home.html', 
        'page_title':'Home' 
        }, 
        name='home'), 
.. 

的base.html文件由home.html的扩展

{% extends "base.html" %} 

{% block content %} 
Your Home 
{% endblock %} 

我觉得PYTHONPATH,文件一切的位置是正确done..Still我得到一个错误TemplateDoesNotExist

Request Method:  GET 
Request URL: http://127.0.0.1:8000/ 
Django Version:  1.4 
Exception Type:  TemplateDoesNotExist 
Exception Value:  

[{'page_title': 'Home'}, {'csrf_token': <django... 

的views.py有

def custom_render(request,context,template): 
    req = RequestContext(request,context) 
    return render_to_response(req) 

def home(request,template_name,page_title): 
    context = {'page_title':page_title} 
    return custom_render(request,context,template_name) 

我不明白为什么发生这种情况。我该如何诊断这个错误..?有人可以告诉我吗?

+2

添加一个','后''家/达蒙的/ dev/ME/myproject的/ mymonitor/templates'' in TEMPLATE_DIRS' – karthikr

+0

此外,模板结构应该是'/ templates/mymonitor/home。html' – karthikr

+0

html文件不应该驻留在TEMPLATE_DIRS? – damon

回答

2

它应该是render_to_response(template)而不是render_to_response(req)

下面是来自Django文档片段:

return render_to_response('my_template.html', 
          my_data_dictionary, 
          context_instance=RequestContext(request)) 

你也有TEMPLATE_DIRS一个相对路径时,它应该是绝对(即从一个斜线开始,像/home/damon/...) 。因此filesystem.Loader找不到您的模板。


这里只是一个建议。 TemplateResponse更酷,然后老派render_to_response

+0

对不起,正在努力与坏的网络连接..我已经把堆栈跟踪在http://pastebin.com/DbUfKdw6 ..我用绝对路径模板目录 – damon

+0

@ damon好吧,不,代码在你的问题和你的问题堆栈跟踪显示路径是相对的。出于某种原因,'app_directories.Loader'正在'home/damon/dev/me/myproject/mymonitor/templates /'中搜索。请确保所有路径都以斜杠开始(如'/ home/damon/...')。 – kirelagin

+0

另外我会建议取消设置'PYTHONPATH'。你不应该碰它。 – kirelagin

2
  1. 不应修改TEMPLATE_DIRS在这种情况下,因为app_directories.Loader(默认启用)应该为你做,如果你有INSTALLED_APPS您的应用程序。
  2. 你可能在TEMPLATE_DIRS路径忘记“/”(“家/ ......”而应该是一个“/ home/...”)
  3. TEMPLATE_DIRS因为你拥有它现在只是字符串(在其中括号这里忽略不计)括号,它应该是一个tuple所以你需要你的路径后添加逗号:

    TEMPLATE_DIRS = (
           '/home/damon/dev/me/myproject/mymonitor/templates', 
           )