我无法弄清楚如何从Django视图中引用我的模板

时间:2013-05-01 00:02:46

标签: python django django-templates django-views

我是Django的新手,无法弄清楚模板的路径应该是什么样子。我的项目目录树如下所示:

blog
blog/blog
blog/blog/__init__.pyc
blog/blog/wsgi.pyc
blog/blog/urls.py
blog/blog/urls.pyc
blog/blog/wsgi.py
blog/blog/__init__.py
blog/blog/settings.py
blog/blog/settings.pyc
blog/home
blog/home/views.py
blog/home/templates
blog/home/templates/home
blog/home/templates/home/main.html
blog/home/__init__.pyc
blog/home/urls.py
blog/home/urls.pyc
blog/home/models.py
blog/home/tests.py
blog/home/__init__.py
blog/home/views.pyc
blog/manage.py

以下是我的观点(来自blog/home/view.py):

from django.shortcuts import render_to_response

def home(request):
    return render_to_response("home/main.html", {"name" : "maxwell"})

我可以在此处找到我的settings.py文件的编辑副本:http://pastebin.com/UMTepK9j

最后,这是我浏览127.0.0.1:8000时出现的错误:

TemplateDoesNotExist at /home/main.html

有人可以告诉我在拨打render_to_response时应该看到的路径是什么吗?

1 个答案:

答案 0 :(得分:1)

settings.py中的TEMPLATE_DIRS应指向template文件夹。

应该是这样的:

TEMPLATE_DIRS = (
    '../home/templates'
)

这应该有效。

注意:您使用的是不推荐使用的相对路径。你应该在settings.py

中有类似的内容
import os
settings_dir = os.path.dirname(__file__)
PROJECT_ROOT = os.path.abspath(os.path.dirname(settings_dir))

...

TEMPLATE_DIRS = (
    os.path.join(PROJECT_ROOT, '../home/templates/'),
)

此外,您在调用render_to_response时未传递RequestContext。有了这个,您的模板将缺少一些对您的项目很重要的变量,如user。最好这样称呼它:

return render_to_response(
    "home/main.html",
    context_instance=RequestContext(
        request,
        {'name':'maxwell'}
    )
)