为什么django无法扩展项目级模板?

时间:2016-10-29 14:59:20

标签: django python-2.7 django-templates django-1.8

这是我的目录:

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内的index.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

这是postmortem的模板:

模板加载器postmortem

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)

1 个答案:

答案 0 :(得分:1)

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

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