Django 模板中的“{% extends %}”与“{% include %}”

问题描述 投票:0回答:5

什么时候特别扩展模板,什么时候使用include?是否包含对用户个人资料部分(例如我们网站一角的关于我)等内容的任何使用?

python django django-templates include templatetags
5个回答
76
投票

扩展允许您替换父模板中的块(例如“内容”),而不是包含构建页面的部分(例如“页眉”和“页脚”)。这允许您拥有包含完整布局的单个模板,并且您只需通过替换块来“插入”另一个模板的内容。

如果所有页面都使用用户配置文件,您可能希望将其放入由其他人扩展的基本模板中或将其包含到基本模板中。如果您只想在很少的页面上显示用户配置文件,您也可以将其包含在这些模板中。 如果用户配置文件除了几页之外是相同的,请将其放在块内的基本模板中,然后可以在那些需要不同配置文件的模板中替换它。


11
投票

查看有关 django 模板继承.

扩展某种“包含”父模板,然后可以覆盖它的一部分以获得不同的功能。

Include 做一个简单的包含在当前上下文中呈现模板。


5
投票

extends 创建“父子关系”。在扩展的情况下,有可能覆盖父功能。而 include 只是呈现 html 响应。


1
投票

使用

% include ... with
see docs 允许覆盖包含页面中的变量。所以不同意 muhammad-awais-bin-majid 的回答。

假设这两个子句只是代表页面构建的不同方式:

  1. 扩展 - 像页面的外部包装器一样使用,
  2. include - 在当前页面中插入包含的页面。

也可以在链式嵌套中使用多个扩展页面, 但包括允许我们一个接一个地使用多个包含的页面,而不仅仅是在链式嵌套中。


0
投票

{% 扩展 %}:

  • 可以扩展一个模板,然后子模板可以覆盖父模板中定义的{% block %}

  • 必须是模板中的第一个模板标签,这意味着在一个模板中只允许使用一个

    {% extends %}

所以基本上,你应该把像

{% block title %}
{% block header %}
{% block navigation-bar %}
{% block main %}
{% block footer %}
这样的常规布局组件放在像
base.html
这样的基础模板中,然后扩展
base.html
{% extend %}
在主要模板中,例如
index.html
.


{%包括%}:

  • 可以将多个模板注入(放置)到一个模板中,并且同一个模板可以多次注入到一个模板中。

所以基本上,除了像

index.html
这样的基础模板外,你应该把一些页面上使用的不规则布局组件放到像
base.html
这样的主要模板中。


*最后,我认为这些Django管理模板是使用

{% extends %}
{% include %}
{% block %}
的好例子。

© www.soinside.com 2019 - 2024. All rights reserved.