首页 > 解决方案 > Django 基本模板位置

问题描述

我正在使用 Django 2.0.7 创建一个网站。我需要使用一个基本模板,它不在所有应用程序的权限范围内,但可以被项目中我的其他应用程序中的模板继承和使用。

我已经适当地编辑了我的 settings.py 文件(根据文档),但是当我转到我网站的根(即主页)页面时,我得到一个空白页面 - 谁能解释为什么?

我有以下目录结构

myproj
    ----manage.py
    ----app1
    ----templates/
            base.html
            index.html
    ----static/
    ----myproj
            __initi__.py
            wsgi.py
            settings.py
            urls.py
            views.py # <- I added this

我的 settings.ini 文件的相关部分如下所示:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['{0}/templates/'.format(BASE_DIR),],
        'APP_DIRS': True,
        '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',
            ],
        },
    },
]

视图.py:

from django.http import HttpResponse


def index(request):
    return HttpResponse()

为什么 django 找不到我的 index.html ?

标签: djangodjango-templates

解决方案


在你的设置中使用'DIRS': [os.path.join(BASE_DIR, "templates")],你的视图应该返回一个知道要渲染什么模板的对象,比如这个:

from django.shortcuts import render

def index(request):
    return render(request, 'index.html')

您还可以根据需要返回TemplateResponse()、SimpleTemplateResponse()和其他对象。


推荐阅读