1. 程式人生 > >Django中模板查詢路徑及丟擲TemplateDoesNotExist的異常時如何查詢錯誤資訊

Django中模板查詢路徑及丟擲TemplateDoesNotExist的異常時如何查詢錯誤資訊

模板查詢路徑:

在專案的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__)))
  1. ‘DIRS’ : 這是一個列表,在這個列表中可以存放所有的模板路徑,以後在檢視中使用render()或者render_to_string()渲染模板的時候,會在這個列表的路徑中查詢模板。
    注意: render_to_string()和render()作用一樣,傳入的引數也是一樣的,但是render_to_string()即將被廢棄了,所以不用管他,在開發專案的時候使用render()就好了。
  2. ‘APP_DIRS’ : 預設為True,這個設定為True後,會在INSTALLED_APPS下查詢安裝了的APP下的templates檔案中查詢模板。
  3. 查詢順序:比如程式碼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的異常時解決方法

  1. 首先先檢視render()中的檔名輸入是否正確。
  2. 然後檢視是否將模板檔案(.html 檔案)寫入了templates中,檢視templates檔名是否正確,必須為templates ,
  3. 檢視’DIRS’中是否添加了路徑。
  4. 如果是app中的templates,就去INSTALLED_APPS檢視是否安裝了app。