57

我可以为我的项目创建一个所有应用程序都可以从中提取的基本模板吗?还是我必须为每个应用程序创建一个基本模板?如果我希望它们相同,我会复制它们吗?

4

5 回答 5

86

你当然可以。base.html 的快速示例

<!DOCTYPE html>
<html>
    <head>
        <title>My Project</title>
    </head>

    <body>
    {% block content %}{% endblock content %}
    </body>
</html>

假设你有一个名为 myapp 的应用程序,它有一个 view.html 页面,

{% extends "base.html" %}

{% block content %}
    <h2>Content for My App</h2>
    <p>Stuff etc etc.</p>
{% endblock content %}

花一些时间阅读文档以获取更多信息

于 2013-02-06T02:20:25.240 回答
26

对于 Django 版本 3

这里的一些答案是正确的,但它们没有告诉您将文件放在目录结构中的什么位置。所以我要稍微解释一下答案。



是的,您可以使用从项目目录{% extends "base.html" %}扩展base.html文件。
需要注意的重要一点是放置 base.html 文件的位置。

  1. 打开project_name/project_name/settings.py并找到TEMPLATES数组
    并将其更新'DIRS' : []'DIRS': [os.path.join(BASE_DIR, 'templates')]
  2. 在根级别创建一个名为templates. 此文件夹的位置将是project_name/templates
  3. projects_name/templates将您想要从所有应用程序访问的所有模板放在此处。
    文件:project_name/templates/base.html
  4. 从任何特定于应用程序的模板扩展此基本文件,该模板可能位于project_name/app_name/templates/app_name/template_file.html使用{% extends "base.html" %}.

    {% extends "base.html" %}
    
    {% block content %}
        <h2>Content for My App</h2>
        <p>Stuff etc etc.</p>
    {% endblock content %}
    



此外,您还可以通过更新到in来创建static与模板目录相同级别的项目范围目录。STATICFILES_DIRSSTATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]project_name/project_name/settings.py


最终目录结构看起来像 -

project_name/
    app_name/
        templates/
            app_name/
                template_file.html

    project_name/
        settings.py

    templates/
        base.html

    static/
        css/
        js/
        img/
于 2020-03-30T13:23:48.823 回答
9

最后一个答案有问题,这里是正确的;你必须有这样的 Base.html:

{% load staticfiles %}

<!DOCTYPE html>
<html>
<head>
    <title>My Project</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>

也适用于 index.html

{% extends "appname/base.html" %}
{% block content %}
     <h1>test</h1>
{% endblock %}
于 2016-03-30T06:34:49.623 回答
7

是的,你绝对可以做到这一点。通过在 Django 模板中使用extendsinclude模板标签。

我开始学习 Django,最近发现了这一点。如果您有兴趣了解我如何构建 Django 模板以从 a 继承然后常见的东西,例如导航栏和页眉、页脚等,我的代码在Github 。base.htmlinclude

于 2013-02-06T03:42:04.280 回答
0

是的,您可以为您的项目创建一个其他应用程序将扩展的基本模板。检查@Kenny_Shen 的答案。

如果您担心应用程序隔离,只想添加两个注释。

  1. 如果您不希望您的应用程序依赖“base.html”命名约定,您可以使用变量注入实际名称,请查看:如何使用 Django 的模板扩展变量?有关详细信息,

  2. 您可能希望将应用程序模板块命名为其他名称,而不是“内容”以避免与其他应用程序发生冲突。

于 2018-10-16T15:27:49.163 回答