为什么 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__))))
这是我的目录:
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__))))