Python Django Global base.html模板

Python 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>

我是Django的新手。我将Django 1.8.6与Python 2.7一起使用。我正在尝试使用base.html模板,该模板可以在整个网站上使用,每个应用程序都可以访问它。以下是我的测试站点的当前结构:

twms

民意测验

迁移

静止的

模板

计划

迁移

静止的

模板

计划

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 %}
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'),]。将此添加到您的答案中,我会将其标记为正确。由于我包含了一个基本文件,我对此已坚持了很长时间,谢谢