从项目根 Django 扩展模板

Posted

技术标签:

【中文标题】从项目根 Django 扩展模板【英文标题】:Extending Templates from project root Django 【发布时间】:2018-03-20 08:16:39 【问题描述】:

在我的根文件夹中,我有一个模板文件夹,里面有一个 base.html 文件。我有一个带有一些 html 的应用程序,我希望它扩展 base.html。

这是base.html中的代码:

<header><h3>Header here</h3></header>
    % block content %
    % endblock %
<footer><h3>Footer here</h3></footer>

app里面的代码是:

% extends base.html %
% block content %
<h1> question.question_text </h1>
<ul>
    % for choice in question.choice_set.all %
    <li> choice.choice_text  --  choice.votes  vote    choice.votes|pluralize </li>
% endfor %
</ul>

<a href="% url 'polls:detail' question.id %">Vote again?</a>
% endblock %

由于某种原因,我在“扩展”标签错误中收到无效的模板名称,我不知道为什么。

我已通过在线搜索将我的 settings.py 文件更新为此文件,但仍然无法正常工作:

TEMPLATES = [
    
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.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',
            ],
        ,
    ,
]

【问题讨论】:

【参考方案1】:

文件名应该用引号引起来

% extends "base.html" %

% block content %
% endblock %

在你的 settings.py 中应该是

TEMPLATES = [
    
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.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',
            ],
        ,
    ,
]

【讨论】:

我已更新模板以包含引号,但现在我收到 TemplateDoesNotExist 错误。如上所示,我已将目录包含在 DIRS 中,并且检查了 base.html 是否位于预期的目录中。有什么想法吗? @dobolicious 查看最新答案 等等别着急,发现问题了,我的模板目录放错地方了。感谢您的帮助和您的时间。

以上是关于从项目根 Django 扩展模板的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何重新分发包含可扩展 HTML 模板的项目/应用程序?

Django - 创建一个没有扩展请求处理的主页面(不直接到模板)

Django模板扩展了错误的模板

Django模板扩展不调用CSS

无法在 Django 上扩展 html 模板

Django 模板不加载子模板的内容