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。

猜你喜欢

转载自blog.csdn.net/xujin0/article/details/83339303