为什么 Django 不能扩展项目级模板?

Why django not able to extend project level template?

这是我的目录:

myproject/
├── frontpage
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── admin.py
│   ├── admin.pyc
│   ├── migrations
│   │   ├── __init__.py
│   │   └── __init__.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── templates
│   │   └── intrafish
│   │       └── index.html
│   ├── tests.py
│   ├── views.py
│   └── views.pyc
├── myproject
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings
│   │   ├── __init__.py
│   │   ├── __init__.pyc
│   │   ├── base.py
│   │   ├── base.pyc
│   │   ├── development.py
│   │   ├── development.pyc
│   │   └── production.py
│   ├── urls.py
│   ├── urls.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
├── manage.py
├── requirements.txt
└── templates
    └── base.html

我正在尝试在 Frontpage 应用程序的 index.html 中扩展 base.html。 我的 base.html:

{% load i18n %}
{% load url from future %}
{% load staticfiles %}


{% block header %} {% endblock %}

我的index.html:

{% extends "base.html" %}

我的wsgi.py:

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "makemeacurry.settings")

application = get_wsgi_application()

我的manage.py:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "makemeacurry.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

我确实觉得这是因为我将我的设置隔离在不同的文件中,所以才会发生这种情况。

我在 base.py 中使用 from .base import * 设置在 development.py 中继承的模板:

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = [
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
]


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            join(BASE_DIR, 'templates'),        ],
        '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',
                'django.template.context_processors.i18n',

            ],
            'debug': True,
        },
    },
]

我怎样才能完成这项工作?

谢谢

------------ ## 编辑 1 ##

这是错误:

TemplateDoesNotExist at /

base.html

这是事后分析模板的样子:

模板加载程序事后分析

Django 尝试按以下顺序加载这些模板:

Using loader django.template.loaders.filesystem.Loader:
    /Users/myuser/projects/myproject/myproject/templates/base.html (File does not exist)
Using loader django.template.loaders.app_directories.Loader:
    /Users/myuser/.virtualenvs/myproject/lib/python2.7/site-packages/django/contrib/admin/templates/base.html (File does not exist)
    /Users/myuser/.virtualenvs/myproject/lib/python2.7/site-packages/django/contrib/auth/templates/base.html (File does not exist)
    /Users/myuser/projects/myproject/frontpage/templates/base.html (File does not exist)

问题是您的设置文件在一个子目录中,因此 BASE_DIR 不再被正确计算;你需要添加另一个级别。

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