2017-06-02 113 views
2

我試圖用渲染上顯示PyCharm編輯HTML,但是當我輸入電子郵件地址:127.0.0.1:8000/index/,以下TemplateDoesNotExist例外出現:TemplateDoesNotExist錯誤(Python的3.6.1,Django的1.11.1,PyCharm)

TemplateDoesNotExist在/指數/ index.html的 請求 方法:GET 請求URL:http://127.0.0.1:8000/index/ Django的版本:1.11.1 異常類型:TemplateDoesNotExist 異常值:index.html的 異常位置:d:\ python3.6.1 \ LIB \站點包\ Django的\模板\ LO ader.py在get_template 25行 Python的可執行文件:d:\ python3.6.1 \ python.exe Python的版本:3.6.1 Python的路徑:
[ 'C:\用戶\管理員\客人', 「d :\ python3.6.1 \ python36.zip', 'D:\ python3.6.1 \ DLLs', 'D:\ python3.6.1 \ lib', 'D:\ python3.6.1', 'D:\ python3.6.1 \ LIB \站點包] 服務器時間:星期五,2017年6月2日3點30分58秒+ 0000`TemplateDoesNotExist在/索引/

settings.py:

ROOT_URLCONF = 'guest.urls' 
TEMPLATES = [ 
{ 
    'BACKEND': 'django.template.backends.django.DjangoTemplates', 
    'DIRS': [], 
    'APP_DIRS': True, 
    'OPTIONS': { 
     'context_processors': [ 
      'django.template.context_processors.debug', 
      'django.template.context_processors.request', 
      'django.contrib.auth.context_processors.auth', 
      'django.contrib.messages.context_processors.messages', 
     ], 
    }, 
}, 
] 

views.py:

from django.shortcuts import render 

# Create your views here. 
def index(request): 
return render(request,"index.html") 

PyCharm的截圖:

enter image description here

我曾嘗試提供在計算器上的一些方法,但他們沒有工作。這個異常是由錯誤的dirs引起的嗎?我該如何處理這種情況?

+0

_caused錯誤的dirs_ ...你沒有任何目錄:''DIRS':[]' –

+0

你已經完成了'collectstatics'嗎?你在'settings.py中設置了靜態路徑'文件?你把所有的模板放在靜態模板文件夾中嗎? –

+2

@ PiyushS.Wanare你的評論的每一部分都是錯誤的。爲什麼collectstatic與模板有什麼關係?爲什麼模板會在靜態目錄中? –

回答

7

看看這個:

TEMPLATES = [ 
{ 
    'BACKEND': 'django.template.backends.django.DjangoTemplates', 
    'DIRS': [], 
    'APP_DIRS': True, 
    'OPTIONS': { 
     'context_processors': [ 
      'django.template.context_processors.debug', 
      'django.template.context_processors.request', 
      'django.contrib.auth.context_processors.auth', 
      'django.contrib.messages.context_processors.messages', 
     ], 
    }, 
}, 
] 

具體

'DIRS': [], 

你需要告訴Django去哪裏尋找你的模板。如果您的主項目根目錄中有模板文件夾。然後,添加

os.path.join(BASE_DIR, 'templates') 

這裏假設你的項目有這樣的結構:

root 
    app1 
     ... 
    templates/ 
     what we're referencing with os.path.join(BASE_DIR, "templates") 
     .... 
    static/ 
     what we're referencing with STATIC_ROOT = os.path.join(BASE_DIR, "static") 
    ... 

如果置入的模板您的應用程序內。有兩件事。

你的項目中的應用需要這種結構的模板文件夾

app name (folder) 
    templates (folder) 
     app name (folder) 
      (template files) e.g. - "base.html" 

你需要加入這行

os.path.join(BASE_DIR, APP NAME, "templates") 

附錄:毫無疑問,你會遇到這個問題,好吧...讓我們繼續並覆蓋它。

如果要擴展/包括作爲在一個應用程序(未在基座模板文件夾),你將需要引用它們所在的模板:

實施例:我有一個模板中的「MyApp的/模板/ myapp/template.html「,我想包括它。

然後,我會做{% include "myapp/template.html" %}或如果延長{% extend "myapp/template.html" %}。如果他們在基本模板文件夾中,那麼你可以直接引用它們作爲"template.html"

+0

非常感謝您耐心解釋,以及我的模板(文件夾)被設置在我的應用程序'sign'下,我想添加應用程序名稱'sign': –

+0

非常感謝您耐心解釋,以及我的模板)被設置在我的應用程序'sign'下,我想添加應用程序名'sign':'DIRS':[os.path.join(BASE_DIR,sign,「templates」)],但是發生另一個異常,NameError名稱'符號'沒有被定義。我很抱歉,我對Python的知之甚少,但我真的很想回過頭來看看我現在面臨的問題。 –

+0

它不是一個變量,它是一個字符串...使用引號。不要聽起來很刺耳,但如果你不知道這一點,你不應該試圖使用Django。這是基本的Python,Django是高級的Python。至少通過一些教程,它會爲您節省一些麻煩。 – Pythonista

1

我有同樣的問題。這主要是由於,如果你沒有在「settings.py」文件安裝你的應用

只是這樣做在你的settings.py文件,你的錯誤將會消失

INSTALLED_APPS = [ 
    '<app name>.apps.<app name>Config', 
] 

在粘貼的地方你的「應用程序名稱」