我可以为我的项目创建一个所有应用可以从中抽取的基本模板吗?或者我是否必须为每个应用程序创建基本模板?如果我想要它们是相同的我只是复制它们?
答案 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模板中使用extends
和include
模板标记。
我开始学习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
文件的放置位置。
project_name/project_name/settings.py
并找到TEMPLATES
数组'DIRS' : []
更新为'DIRS': [os.path.join(BASE_DIR, 'templates')]
templates
的目录。该文件夹的位置将为project_name/templates
projects_name/templates
中。 project_name/templates/base.html
使用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的答案。
如果您担心应用程序隔离,只想添加两个注释。
如果您不希望您的应用依赖于“ base.html”命名约定,则可以为实际名称添加变量,请查看:How do I use Django's template extends variable?,以了解详细信息,
您可能希望将应用程序模板块命名为其他名称,而不是“内容”,以避免与其他应用程序发生冲突。