2013-05-31 106 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', 
           )