Python Django Global base.html模板
我是Django的新手。我将Django 1.8.6与Python 2.7一起使用。我正在尝试使用base.html模板,该模板可以在整个网站上使用,每个应用程序都可以访问它。以下是我的测试站点的当前结构: twms 民意测验 迁移 静止的 模板 计划 迁移 静止的 模板 计划 index.htmlPython Django Global base.html模板,python,django,templates,Python,Django,Templates,我是Django的新手。我将Django 1.8.6与Python 2.7一起使用。我正在尝试使用base.html模板,该模板可以在整个网站上使用,每个应用程序都可以访问它。以下是我的测试站点的当前结构: twms 民意测验 迁移 静止的 模板 计划 迁移 静止的 模板 计划 index.html {% extends 'tmws/base.html' %} {% block content %} <h1>Projects</h1> <ul>
{% extends 'tmws/base.html' %}
{% block content %}
<h1>Projects</h1>
<ul>
{% for project in project_list %}
<li><a href="{% url 'project:detail' project.id %}">{{ project.name }}</a></li>
{% endfor %}
</ul>
end of list
{% endblock %}
tmws
静止的
模板
tmws
base.html
下面是project/templates/project/index.html的代码
{% extends 'tmws/base.html' %}
{% block content %}
<h1>Projects</h1>
<ul>
{% for project in project_list %}
<li><a href="{% url 'project:detail' project.id %}">{{ project.name }}</a></li>
{% endfor %}
</ul>
end of list
{% endblock %}
检查设置中的模板值。您可以在目录中添加DIR选项,您可以在其中放置所有常用模板
链接:您需要将所有模板文件夹添加到settings.py中的模板设置中。Django然后会将它们视为都在同一个文件夹中。看起来你还没有把它们全部加进去。您希望模板的外观如下所示:
TEMPLATES = [
{
'DIRS': [
'twms.tmws.templates', # Since this is not in an app
],
'APP_DIRS': True, # Automatically include the templates from INSTALLED_APPS
},
]
我认为您的模板目录配置可能有问题。在您的项目的settings.py中,尝试检查您是否具有与此类似的配置:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'your template dir name')]
,
'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',
],
},
},
]
其中“您的模板目录名”
应该是tmws。这将使django在您尝试在HTML中扩展模板时搜索此目录。您可以添加任意数量的目录
我认为Django现在必须在以下位置搜索模板:
twms/project/templates/project
因此,如果您将base.html文件放在那里,Django可能会找到它
另一个建议是创建一个通用模板目录,并将base.html放在那里,因为您希望在整个站点中使用它。这正是我对订购模板的喜好,但无论哪种方式都应该有效
编辑:
在settings.py中添加以下内容解决了问题。阅读评论了解更多信息:
MASTER_BASE_DIR = os.path.dirname(__file__)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(MASTER_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',
],
},
},
]
您可以按如下方式设置目录以搜索模板:
'DIRS': [os.path.join(MASTER_BASE_DIR, 'templates'),]
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# -> os.path.dirname(os.path.dirname(/your/path/tmws/tmws/settings.py))
# -> /your/path/tmws/
应改为:
'DIRS': [os.path.join(MASTER_BASE_DIR, 'tmws/templates'),]
为什么??因为BASE_DIR的定义如下:
'DIRS': [os.path.join(MASTER_BASE_DIR, 'templates'),]
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# -> os.path.dirname(os.path.dirname(/your/path/tmws/tmws/settings.py))
# -> /your/path/tmws/
因此,BASE_DIR指向您的顶部文件夹,如果您使用“templates”将其加入,它将变成:
/your/path/tmws/templates
,而该文件夹不存在。但是,随着目录列表中的更改行,它将成为正确的/your/path/tmws/tmws/templates
。模板设置中有哪些内容?欢迎使用。您可以尝试添加:os.path.join(BASE\u DIR,'twms/templates')
或os.path.join(BASE\u DIR,'twms.templates')
。我不确定我是否可以在那里使用点符号。谢谢你的帮助,但我仍然得到同样的错误。由于某种原因,我无法离开projects目录。我不确定它是否与BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(file)))有关。我已经尝试了很多方法来处理这个问题,但是当我得到一个“此页面不可用”错误时,通过将以下变量添加到settings.py MASTER_BASE_DIR=os.path.dirname(uu file_uuuu)中,然后将以下变量添加到Temaplates=[…'DIRS':[os.path.join(MASTER_BASE_DIR,'templates'),]。将此添加到您的答案中,我会将其标记为正确。由于我包含了一个基本文件,我对此已坚持了很长时间,谢谢