2017-05-18 107 views
0

我有一个begin.html文件,我试图访问本地主机:8000 /开始,但我试图访问它时得到DjangoTemplateDoesNotExist错误。Django TemplateDoesNotExist,但回溯达到views.py

在模板中的唯一事情是

<h1>welcome to my app !</h1> 

,它是在应用程序/模板目录。

在相同的应用程序目录是我的views.py文件,其中包含

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 

from django.shortcuts import render 

# Create your views here. 

def begin(request): 
    print("DEBUG STATEMENT") 
    return render(request, "template/begin.html", {}) 

达到在开始return语句,因为打印语句和回溯都告诉我,不过在Django无法找到之后的模板。

如果是相关的,我的urls.py文件

from django.conf.urls import url 
from django.contrib import admin 

from app.views import begin 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^begin/$', begin, name = 'begin') 
] 
在项目目录

+3

尝试从render方法中删除'模板'。只使用'begin.html'。 –

+0

你在什么文件夹结构看起来像在你的应用程序? –

+0

这给了我同样的错误。 – plzhalpplzxubtunu

回答

0

由于您尚未提供该信息,因此我认为您的应用程序内部为urls.py。如果您有两个urls.py,您需要从django看起来第一个网址的第一个网址重定向到另一个网址。

from django.conf.urls import include 

urlpatterns = [ 
    url(r'^', include('YOURAPPNAME.urls')) 
] 

在urls.py您appdirectory写

from . import views //importing views from current directory 
urlpatterns = [ 
    url(r'^begin/$' views.begin, name=begin) 
] 

另一个技巧,可以考虑使用当您使用HTTP响应选择render_to_response,我知道渲染是新的,但由于您使用我的回应在你的情况下,将使用render_to_response,并跳过上下文。

return render_to_response('YOURAPPNAME'/begin.html) 
0

检查你的模板结构是这样,

your_app_name 
--> **templates** 
    --> **your_app_name** 
     --> **'begin.html'** 
--> static 
--> models.py 
--> ........ 

然后,改变你的看法,这样子,

return render(request, "your_app_name/begin.html", {}) 

的Django作为名称下的目录默认勾选的“模板“,在你的app_directory中。 当容纳多个应用程序时,为了便于使用,使用app_name将模板保存在目录下。

docs

这是可能的 - 最好 - 组织模板中包含模板,每个模板目录中的子目录。约定是为每个Django应用程序创建一个子目录,并根据需要在这些子目录中创建子目录。

这是为了您自己的理智。将所有模板存储在单个目录的根级别会变得麻烦。

当APP_DIRS为True时,DjangoTemplates引擎将在模板子目录中查找已安装应用程序的子目录中的模板。这个通用名称保持向后兼容。