从问题评论看来,您在使用 Django 模板而不是 urlconfig 时遇到问题。这是 Django 模板的工作原理。在您settings.py
定义的变量TEMPLATES_DIRS
中,您指定 Django 将在其中查找模板的所有目录的元组。
假设您有以下内容TEMPLATES_DIRS
:
TEMPLATES_DIRS = (
'/absolute/path/to/foo',
'/absolute/path/to/bar',
)
然后,如果您查找模板base.html
,Django 将在以下位置查找它,如果找到,将使用第一个位置:
/absolute/path/to/foo/base.html
/absolute/path/to/bar/base.html
在您的情况下,您提到您将模板存储在 Django 的项目文件夹和应用程序的文件夹中。在这种情况下,您必须确保两个文件夹的定义TEMPLATES_DIRS
如下:
TEMPLATES_DIRS = (
'/absolute/path/to/project/templates',
'/absolute/path/to/app/templates',
)
然后在您的情况下,Django 将能够同时找到base.html
和index.html
。现在为了让事情变得更简单,您可以PROJECT_PATH
在settings.py
其中定义将存储项目路径的绝对路径,以便您可以轻松地将项目移动到不同的位置。我认为这可能是您的问题所在。在 Django >= 1.4 中,您具有以下项目结构:
/project <= this should be your PROJECT_PATH
/project <= instead of this
templates/
base.html
settings.py
/recipe
templates/
index.html
models.py
考虑到这一点,尝试使用这样的东西:
PROJECT_PATH = os.path.abspath(os.path.join(__file__, '..', '..'))
PROJECT_NAME = os.path.basename(PROJECT_PATH)
TEMPLATES_DIRS = (
os.path.join(PROJECT_PATH, PROJECT_NAME, 'templates'),
os.path.join(PROJECT_PATH, 'recipe', 'templates')
)
在上面的 PROJECT_PATH 中计算了项目的绝对路径。假设您settings.py
位于/some/path/project/project/settings.py
。然后按如下方式计算项目路径:
>>> # settings.py
>>> print __file__
/some/path/project/project/settings.py
>>> print os.path.join(__file__, '..', '..')
/some/path/project/project/settings.py/../../
>>> # now abspath normalizes the path two levels up
>>> print os.path.abspath(os.path.join(__file__, '..', '..'))
/some/path/project
>>> # now you figure out the project name so that you can get the project templates folder
>>> print os.path.basename(os.path.abspath(os.path.join(__file__, '..', '..')))
project
>>> print os.path.join(PROJECT_PATH, PROJECT_NAME, 'templates')
/some/path/project/project/templates
>>> print os.path.join(PROJECT_PATH, 'recipe', 'templates')
/some/path/project/recipe/templates