模板查找路径:
在项目的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。