运行django app时TemplateDoesNotExist

时间:2013-05-31 16:11:47

标签: python django django-templates

我的django应用程序结构如下

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,文件的位置一切都正确完成..但我得到一个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 个答案:

答案 0 :(得分: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更令人敬畏和冷静。

答案 1 :(得分:2)

  1. 在这种情况下,您不应该修改TEMPLATE_DIRS,因为app_directories.Loader(默认情况下已启用)应该为您执行此操作,如果您的应用程序位于INSTALLED_APPS
  2. 您可能会忘记TEMPLATE_DIRS中的'/'('home / ...'而应该是'/ home /...')
  3. 你现在拥有的TEMPLATE_DIRS只是字符串(在括号中,这里忽略了括号),它应该是tuple所以你需要在你的路径后添加逗号:

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