Django 项目基础模板
Posted
技术标签:
【中文标题】Django 项目基础模板【英文标题】:Django project base template 【发布时间】:2013-01-21 03:26:14 【问题描述】:我可以为我的项目创建一个所有应用都可以从中提取的基本模板吗?还是我必须为每个应用程序创建一个基本模板?如果我希望它们保持相同,我会复制它们吗?
【问题讨论】:
【参考方案1】:当然可以。 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了解更多信息
【讨论】:
许多人忽略的重要一点是% extends xxx %
可以采用字符串文字文件名(即“base.html”)或解析为文件名。我们在开发过程中使用它并即时更改% extends base_template %
的值。所有主要模板(列表、详细信息、平面文件等)都使用非常通用/语义标记,以及所有 CSS/等。在每个主题的基本文件中定义。例如。 themes/blue.html
或 themes/neon.html
.
我不太清楚这些文件必须放在哪里。我希望我的基本模板位于 PROJECT_ROOT/templates/base.html 中,因此它适用于所有应用程序。但是现在我该如何引用它,因为“扩展”语句在 PROJECT_ROOT/app-name/templates/... 中查找模板?
@jlh:当我将模板放入 PROJECT_ROOT/project-name/templates/base.html 时,它对我有用
@jih 你可以告诉 Django 通过编辑settings.py
文件来查看PROJECT_ROOT/some_app/templates
- 例如:'DIRS': [os.path.join(BASE_DIR, "some_app", "templates")]
【参考方案2】:
是的,您绝对可以这样做。通过在 Django 模板中使用 extends
和 include
模板标签。
我开始学习 Django 并且最近发现了这一点。我的代码位于Github,如果您有兴趣了解我如何构造 Django 模板以从 base.html
继承,然后是 include
常见的东西,例如导航栏和页眉、页脚等。
【讨论】:
【参考方案3】:最后一个答案有问题,这里是正确的; 你必须有这样的 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 %
【讨论】:
轻微错字 - 应该是 % extends "appname/base.html" % 而不是 % extend "appname/base.html" %【参考方案4】:是的,您可以为您的项目创建一个其他应用程序将扩展的基本模板。检查@Kenny_Shen 的答案。
如果您担心应用隔离,只想添加两个注释。
如果您不希望您的应用依赖“base.html”命名约定,您可以使用变量注入实际名称,详情请查看:How do I use Django's template extends variable?,
您可能希望将应用模板块命名为其他名称,而不是“内容”,以避免与其他应用发生冲突。
【讨论】:
【参考方案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
使用% 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 %
此外,您还可以通过将project_name/project_name/settings.py
中的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/
【讨论】:
以上是关于Django 项目基础模板的主要内容,如果未能解决你的问题,请参考以下文章
59 Django基础三件套 , 模板{{}}语言 , 程序连mysql Django项目app Django中ORM的使用