我可以为我的项目创建一个所有应用程序都可以使用的基础模板吗?或者我必须为每个应用程序创建一个基础模板吗?如果我希望它们相同,我只需复制它们即可?
ffscu2ro1#
当然可以。一个简单的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 %}
请花些时间阅读文档以了解详细信息
3df52oht2#
对于Django版本3这里的一些答案是正确的,但是它们没有告诉你在目录结构中放置文件的位置,所以我将稍微解释一下答案。可以,您可以使用{% extends "base.html" %}从项目目录扩展base.html文件。
{% extends "base.html" %}
base.html
需要注意的重要事项是放置base.html文件的位置。
1.打开project_name/project_name/settings.py并找到TEMPLATES数组并将'DIRS' : []更新为'DIRS': [os.path.join(BASE_DIR, 'templates')]1.在根级别创建名为templates的目录。此文件夹的位置为project_name/templates1.将所有模板放在projects_name/templates中,您希望从所有应用程序访问这些模板。文件:project_name/templates/base.html1.使用{% extends "base.html" %}从任何特定于应用程序的模板(可能位于project_name/app_name/templates/app_name/template_file.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
此外,还可以通过在project_name/project_name/settings.py中将STATICFILES_DIRS更新为STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")],在与模板目录相同的级别创建项目范围的static目录。最终目录结构如下所示-
STATICFILES_DIRS
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
static
project_name/ app_name/ templates/ app_name/ template_file.html project_name/ settings.py templates/ base.html static/ css/ js/ img/
1qczuiv03#
上一个答案有问题,下面是正确答案;你必须有这样的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 %}
2nbm6dog4#
是的,你完全可以做到。通过在Django模板中使用extends和include模板标签。我刚开始学习Django,最近才发现这一点。我的代码在Github,如果你有兴趣看看我是如何构造Django模板来继承base.html和include的常见内容,如导航栏和页眉,页脚等。
extends
include
f8rj6qna5#
是的,你可以为你的项目创建一个基础模板,其他应用程序将扩展该模板。请查看@Kenny_Shen回答。如果您担心应用程序隔离,我只想补充两点。1.如果您不希望您的应用依赖于“base.html”命名约定,您可以使用变量注入实际名称,请参阅:如何使用Django的template extends变量?了解详情1.您可能希望将应用模板块命名为其他名称,而不是“content”,以避免与其他应用冲突。
5条答案
按热度按时间ffscu2ro1#
当然可以。一个简单的base.html示例
假设您有一个名为myapp的应用程序,其中包含一个view.html页面,
请花些时间阅读文档以了解详细信息
3df52oht2#
对于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')]
1.在根级别创建名为
templates
的目录。此文件夹的位置为project_name/templates
1.将所有模板放在
projects_name/templates
中,您希望从所有应用程序访问这些模板。文件:
project_name/templates/base.html
1.使用
{% extends "base.html" %}
从任何特定于应用程序的模板(可能位于project_name/app_name/templates/app_name/template_file.html
)扩展此基本文件。此外,还可以通过在
project_name/project_name/settings.py
中将STATICFILES_DIRS
更新为STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
,在与模板目录相同的级别创建项目范围的static
目录。最终目录结构如下所示-
1qczuiv03#
上一个答案有问题,下面是正确答案;你必须有这样的Base.html:
也适用于index.html
2nbm6dog4#
是的,你完全可以做到。通过在Django模板中使用
extends
和include
模板标签。我刚开始学习Django,最近才发现这一点。我的代码在Github,如果你有兴趣看看我是如何构造Django模板来继承
base.html
和include
的常见内容,如导航栏和页眉,页脚等。f8rj6qna5#
是的,你可以为你的项目创建一个基础模板,其他应用程序将扩展该模板。请查看@Kenny_Shen回答。
如果您担心应用程序隔离,我只想补充两点。
1.如果您不希望您的应用依赖于“base.html”命名约定,您可以使用变量注入实际名称,请参阅:如何使用Django的template extends变量?了解详情
1.您可能希望将应用模板块命名为其他名称,而不是“content”,以避免与其他应用冲突。