Django项目基础模板

时间:2013-02-06 02:10:01

标签: django templates project base

我可以为我的项目创建一个所有应用可以从中抽取的基本模板吗?或者我是否必须为每个应用程序创建基本模板?如果我想要它们是相同的我只是复制它们?

5 个答案:

答案 0 :(得分:65)

当然可以。 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 %}

花一些时间到read the docs了解更多信息

答案 1 :(得分:6)

是的,你绝对可以这样做。在Django模板中使用extendsinclude模板标记。

我开始学习Django并且最近想出了这个。我的代码位于Github,如果您有兴趣了解我如何构建Django模板以继承base.html,然后include常见的东西,如navbar和页眉,页脚等。

答案 2 :(得分:6)

  

在上一个答案中有一些问题,这是正确的答案;   你必须有这样的Base.html:

{% load staticfiles %}

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

以及index.html

{% extend "appname/base.html" %}
{% block content %}
     <h1>test</h1>
{% endblock %}

答案 3 :(得分:5)

对于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 %}
    



此外,您还可以通过将{{1中的static更新为STATICFILES_DIRS来创建与模板目录相同级别的项目范围的STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]目录}}。


最终目录结构如下-

project_name/project_name/settings.py

答案 4 :(得分:0)

是的,您可以为您的项目创建一个基础模板,其他应用程序将对此模板进行扩展。查看@Kenny_Shen的答案。

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

  1. 如果您不希望您的应用依赖于“ base.html”命名约定,则可以为实际名称添加变量,请查看:How do I use Django's template extends variable?,以了解详细信息,

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