Django TemplateDoesNotExist,但traceback到达views.py

时间:2017-05-18 22:14:17

标签: python django

我有一个start.html文件,我试图在localhost:8000 / begin访问,但是在尝试访问时遇到DjangoTemplateDoesNotExist错误。

该模板中唯一的东西是

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

并且它位于app / template目录中。

在同一个app目录中是我的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", {})

start中的return语句已经到达,因为print语句和traceback告诉我,但是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')
]

在项目目录中。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

检查您的模板结构是否像这样,

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

然后,改变你的观点,像这样,

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

Django默认检查app_directory中名称为“templates”的目录。 在容纳多个应用程序时,为了方便,模板会保存在app_name目录下。

来自docs

  

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

     

为了你自己的理智而这样做。将所有模板存储在单个目录的根级别会变得混乱。

     

当APP_DIRS为True时,DjangoTemplates引擎会在已安装应用程序的 templates 子目录中查找模板。保留此通用名称是为了向后兼容。