2017-05-18 54 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引擎將在模板子目錄中查找已安裝應用程序的子目錄中的模板。這個通用名稱保持向後兼容。