我是否可以为我的项目创建一个基础模板,所有应用程序都可以从中绘制?还是我必须为每个应用程序创建一个基础模板?如果我希望它们相同,我只需复制它们吗?
当然可以,这是一个 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 %}
花一些时间来阅读文档以获取更多信息。
对于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
通过使用{% extends "base.html" %}
从任何特定于应用程序的模板扩展此基本文件,该模板可能位于project_name/app_name/templates/app_name/template_file.html
。
{% extends "base.html" %}
{% block content %}
<h2>Content for My App</h2>
<p>Stuff etc etc.</p>
{% endblock content %}
此外,您还可以通过将STATICFILES_DIRS
更新为STATICFILES_DIRS=[os.path.join(BASE_DIR,"static")]
在project_name/project_name/settings.py
中,与模板目录位于同一级别创建项目范围的static
目录。
最终目录结构如下 -
project_name/
app_name/
templates/
app_name/
template_file.html
project_name/
settings.py
templates/
base.html
static/
css/
js/
img/
{% load staticfiles %}
<!DOCTYPE html>
<html>
<head>
<title>My Project</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
{% extends "appname/base.html" %}
{% block content %}
<h1>test</h1>
{% endblock %}
extends
和include
模板标签。base.html
继承Django模板,然后include
常见内容(如导航栏、页眉、页脚等),请访问我的Github页面查看代码。是的,你可以为你的项目创建一个基础模板,其他应用程序将会扩展它。请查看@Kenny_Shen给出的答案。
如果你担心应用程序的隔离问题,我想再补充两点。
如果你不想让你的应用程序依赖于"base.html"这个命名约定,你可以使用变量来注入实际名称,请参见:Django模板如何使用扩展变量?。了解详情。
为了避免与其他应用程序发生冲突,你可能需要将应用程序模板块命名为其他名称,而不是"content"。
settings.py
文件来告诉 Django 在PROJECT_ROOT/some_app/templates
中查找模板 - 例如:'DIRS': [os.path.join(BASE_DIR, "some_app", "templates")]
。 - alex