TemplateDoesNotExist - 文件存在,没有权限问题

时间:2011-02-12 02:01:51

标签: django django-templates

尝试在django中渲染模板时收到此错误:

TemplateDoesNotExist

...
Template-loader postmortem

Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
Using loader django.template.loaders.app_directories.Loader:

这是我的settings.py条目:

SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'template'),
)

以下是我的观点:

def handler(request):
    if request.method == 'GET': 
        NewAppFormSet = modelformset_factory(Application)

    return render_to_response(request, "template/apps.html",{"new_app_form":NewAppFormSet})

我已经尝试了所有可能的路径组合,调整权限等。真正的问题似乎是模板加载器,因为它们无法识别TEMPLATE_DIRS中提出的任何路径。我已经硬编码了这个字符串,无济于事。我还以sudo / root身份运行python manage.py runserver。我不知所措......

6 个答案:

答案 0 :(得分:2)

我有一个非常相似的问题让我发疯。事实证明,我用来学习Python / Django的书并没有说我必须明确地在settings.py中设置模板目录。很混乱。我正在使用Python 2.6& Django 1.3.1 - 也许以前的版本自动找到了模板目录。无论如何,在我的头发拉了一天并在这个网站上阅读了很多之后我发现我必须在settings.py中用以下内容替换默认的TEMPLATE_DIRS赋值:

# Find templates in the same folder as settings.py.
SETTINGS_PATH = os.path.realpath(os.path.dirname(__file__))

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(SETTINGS_PATH, 'templates'),
)

感谢stackoverflow !!

答案 1 :(得分:1)

我不确定我遵循的是什么示例,指定render_to_response快捷方法需要传递视图的请求对象,但这很简单,只需将其更改为:

return render_to_response("template/apps.html",{"new_app_form":NewAppFormSet()})

答案 2 :(得分:0)

尝试使用os.path.realpath:

分配SETTINGS_PATH
SETTINGS_PATH = os.path.realpath(os.path.dirname(__file__))

答案 3 :(得分:0)

您可能已经复制粘贴了现在的TEMPLATE_DIRS,是否将默认值保留在SETTINGS文件的下方?

答案 4 :(得分:0)

来自我的settings.py:

BASE_DIR = os.path.dirname(__file__)

def RELATIVE_PATH(*args):
    return os.path.join(BASE_DIR, *args)

TEMPLATE_DIRS = (
    RELATIVE_PATH('template'),
)

答案 5 :(得分:0)

如果你尝试

怎么办?
return render_to_response(request, "apps.html",{"new_app_form":NewAppFormSet})

而不是

return render_to_response(request, "template/apps.html",{"new_app_form":NewAppFormSet})