【发布时间】:2013-01-21 03:26:14
【问题描述】:
我可以为我的项目创建一个所有应用都可以从中提取的基本模板吗?还是我必须为每个应用程序创建一个基本模板?如果我希望它们保持相同,我会复制它们吗?
【问题讨论】:
标签: django templates project base
我可以为我的项目创建一个所有应用都可以从中提取的基本模板吗?还是我必须为每个应用程序创建一个基本模板?如果我希望它们保持相同,我会复制它们吗?
【问题讨论】:
标签: django templates project base
当然可以。 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.
settings.py 文件来查看PROJECT_ROOT/some_app/templates - 例如:'DIRS': [os.path.join(BASE_DIR, "some_app", "templates")]
是的,您绝对可以这样做。通过在 Django 模板中使用 extends 和 include 模板标签。
我开始学习 Django 并且最近发现了这一点。我的代码位于Github,如果您有兴趣了解我如何构造 Django 模板以从 base.html 继承,然后是 include 常见的东西,例如导航栏和页眉、页脚等。
【讨论】:
最后一个答案有问题,这里是正确的; 你必须有这样的 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 %}
【讨论】:
是的,您可以为您的项目创建一个其他应用程序将扩展的基本模板。检查@Kenny_Shen 的答案。
如果您担心应用隔离,只想添加两个注释。
如果您不希望您的应用依赖“base.html”命名约定,您可以使用变量注入实际名称,详情请查看:How do I use Django's template extends variable?,
您可能希望将应用模板块命名为其他名称,而不是“内容”,以避免与其他应用发生冲突。
【讨论】:
对于 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/
【讨论】: