什么时候特别使用扩展模板,什么时候使用include?像用户个人资料部分(例如我们网站角落的关于我)这样的内容是否有用include?
什么时候特别使用扩展模板,什么时候使用include?像用户个人资料部分(例如我们网站角落的关于我)这样的内容是否有用include?
扩展允许您从父模板替换块(例如“内容”),而不是包含构建页面的部分(例如“页眉”和“页脚”)。 这样,您就可以拥有一个包含完整布局的单个模板,并且只需通过替换块来“插入”其他模板的内容。
如果用户配置文件在所有页面上都被使用,那么您可能希望将其放在基础模板中,该模板由其他模板继承,或者将其包含在基础模板中。 如果您只想在很少的页面上使用用户配置文件,则也可以将其包含在这些模板中。 如果用户配置文件除了某些页面外都是相同的,请将其放在基础模板内的块中,然后在需要不同配置文件的模板中替换它。
extends会创建“父子关系”。如果使用extends,存在覆盖父类功能的风险。而include只是渲染HTML响应。
% include ... with
(请参阅文档) 可以覆盖包含页面中的变量。因此,不能同意 muhammad-awais-bin-majid 的答案。包括:将一个页面的HTML代码复制(可能是样板)到另一个页面。
{% include 'nav.html' %}
扩展:在通用模板内包装一个页面的实质内容。
例如,假设您在每个页面上布局了一些通用内容:页眉、页脚等等...我们将其称为genericPage.html。然后,您可以创建一堆只包含实质内容的小型html片段:home.html、about.html、contact.html等等。可以扩展一个模板,然后子模板可以覆盖在父模板中定义的{% block %}。
必须是模板中的第一个标签,这意味着在一个模板中只允许使用一个{% extends %}
。
因此,您应该将常规布局组件(如{% block title %}
、{% block header %}
、{% block navigation-bar %}
、{% block main %}
和{% block footer %}
)放到基础模板(如base.html
)中,然后在主模板(如index.html
)中使用{% extend %}
扩展base.html
。
因此,基本上应该将在几个页面上使用的不规则布局组件放置在主模板中,例如index.html
,除了基础模板如base.html
之外。
*最后,我认为这些Django管理模板是使用{% extends %}
、{% include %}
和{% block %}
的良好示例。
{% extends 'base.html' %} 用于创建子模板以维护结构和内容继承。{% include 'base.html' %} 用于在一个模板中插入另一个模板的内容而不改变结构。
include 不会改变模板(布局)的整体结构,而 extend 则会改变布局的整体结构。
根据您的需求,您可以选择更适合您工作的方式。