Django中模板查詢路徑及丟擲TemplateDoesNotExist的異常時如何查詢錯誤資訊
阿新 • • 發佈:2018-11-01
模板查詢路徑:
在專案的settings.py檔案中,有一個TEMPLATES配置,這個配置包含了模板引擎的配置,模板查詢路徑的配置,模板上下文的配置等。模板路徑可以在兩個地方配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
#使用命令建立的Django專案,Django不會自動建立templates資料夾,所以'DIRS'預設是空的
#'DIRS': [],
#使用pycharm建立Django專案,會自動在和app的同級目錄下建立一個templates的資料夾,所以預設'DIRS'不是空的,而是templates的路徑
'DIRS': [os.path.join(BASE_DIR,'templates')],
'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' ,
],
},
},
]
BASE_DIR: 是整個專案的根路徑,不管專案轉移到什麼位置,'BASE_DIR’都是專案的根路徑,我們也可以在settings.py檔案中找到它:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
- ‘DIRS’ : 這是一個列表,在這個列表中可以存放所有的模板路徑,以後在檢視中使用render()或者render_to_string()渲染模板的時候,會在這個列表的路徑中查詢模板。
注意: render_to_string()和render()作用一樣,傳入的引數也是一樣的,但是render_to_string()即將被廢棄了,所以不用管他,在開發專案的時候使用render()就好了。 - ‘APP_DIRS’ : 預設為True,這個設定為True後,會在INSTALLED_APPS下查詢安裝了的APP下的templates檔案中查詢模板。
- 查詢順序:比如程式碼
render(request,'index.html')
。會先在DIRS這個列表中依次查詢路徑下有沒有這個模板,如果有,就返回。如果DIRS列表中所有的路徑都沒有找到,那麼會先檢查當前這個檢視所處的app是否已經安裝,如果已經安裝了,那麼就先在當前這個app下的templates資料夾中查詢模板,如果沒有找到,那麼會在其他已經安裝了的app中查詢。如果所有路徑下都沒有找到,那麼會丟擲一個TemplateDoesNotExist的異常。
注: 安裝app就是將app名放在settings.py檔案中的INSTALLED_APPS 這個列表中,例如:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'movie',
]
這裡我就將’movie‘這個app進行了安裝。
丟擲TemplateDoesNotExist的異常時解決方法
- 首先先檢視render()中的檔名輸入是否正確。
- 然後檢視是否將模板檔案(.html 檔案)寫入了templates中,檢視templates檔名是否正確,必須為templates ,
- 檢視’DIRS’中是否添加了路徑。
- 如果是app中的templates,就去INSTALLED_APPS檢視是否安裝了app。