Django18初体验


995 浏览 5 years, 6 months

7.8 模板配置

版权声明: 转载请注明出处 http://www.codingsoho.com/

创建主页视图函数如下

# Create your views here.
def home(request):
    context = {}
    return render(request, "home.html", context)

如果不创建template的话, http://127.0.0.1:8000/ 将会报告下面的错误调试信息

TemplateDoesNotExist 
Template-loader postmortem
Django tried loading these templates, in this order:
•   Using loader django.template.loaders.filesystem.Loader: 
•   Using loader django.template.loaders.app_directories.Loader: 
    o   D:\virtualdir\trydjango18\lib\site-packages\django\contrib\auth\templates\home.html (File does not exist)
    o   D:\virtualdir\trydjango18\lib\site-packages\django\contrib\admin\templates\home.html (File does not exist)
    o   D:\virtualdir\trydjango18\lib\site-packages\django\contrib\admindocs\templates\home.html (File does not exist)

在newsletter下面创建template目录,并且在“INSTALLED_APPS”下面添加“newsletter”,django将会搜索该template目录

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'newsletter'
)

如果将newsletter注释掉,django会不找不到模板文件

Template-loader postmortem
Django tried loading these templates, in this order:
•   Using loader django.template.loaders.filesystem.Loader: 
•   Using loader django.template.loaders.app_directories.Loader: 
    o   D:\virtualdir\trydjango18\lib\site-packages\django\contrib\auth\templates\home.html (File does not exist)
    o   D:\virtualdir\trydjango18\lib\site-packages\django\contrib\admin\templates\home.html (File does not exist)
    o   D:\virtualdir\trydjango18\lib\site-packages\django\contrib\admindocs\templates\home.html (File does not exist)
    o   D:\virtualdir\trydjango18\src\newsletter\templates\home.html (File does not exist)

相对于前面的报错,这个最后一行是新加的D:\virtualdir\trydjango18\src\newsletter\templates\home.html (File does not exist),它是搜索对应的应用的模板路径

在“newsletter”下面创建文件“home.html”, it works

本例子中,我们把templates从application目录中移到root文件夹,在src目录创建templates文件夹

修改settings.py, 更新TEMPLATES里的DIRS

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates")],
        'APP_DIRS': True, # Whether the engine should look for template source files inside installed applications.
        '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',
            ],
        },
    },
]

如果home.html没有创建,django会抛出下面异常,否则, it works.

Template-loader postmortem
Django tried loading these templates, in this order:
•   Using loader django.template.loaders.filesystem.Loader: 
    o   D:\virtualdir\trydjango18\src\templates\home.html (File does not exist)
•   Using loader django.template.loaders.app_directories.Loader: 
    o   D:\virtualdir\trydjango18\lib\site-packages\django\contrib\auth\templates\home.html (File does not exist)
    o   D:\virtualdir\trydjango18\lib\site-packages\django\contrib\admin\templates\home.html (File does not exist)
    o   D:\virtualdir\trydjango18\lib\site-packages\django\contrib\admindocs\templates\home.html (File does not exist)

这一行D:\virtualdir\trydjango18\src\templates\home.html (File does not exist)就是搜索的新指定的模板路径下搜索文件