首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django中的模板继承

Django中的模板继承是一种方法,可以让你在一个基础模板中定义一些通用的内容,然后在其他模板中扩展和重写这些内容。这样可以避免重复编写相同的代码,并提高代码的可维护性。

在Django中,模板继承使用{% extends %}标签来实现。子模板通过这个标签来继承父模板,然后在子模板中使用{% block %}标签来重写父模板中指定的块。

例如,假设你有一个基础模板base.html,其中包含一些通用的内容,如下所示:

代码语言:html
复制
<!DOCTYPE html>
<html>
<head>
   <title>{% block title %}Default Title{% endblock %}</title>
</head>
<body>
   <header>{% block header %}Default Header{% endblock %}</header>
    <main>{% block content %}{% endblock %}</main>
   <footer>{% block footer %}Default Footer{% endblock %}</footer>
</body>
</html>

在这个模板中,{% block %}标签定义了一些可以被子模板重写的块,例如titleheadercontentfooter

现在,你可以创建一个子模板child.html,继承base.html,并重写其中的一些块,如下所示:

代码语言:html
复制
{% extends 'base.html' %}

{% block title %}Child Title{% endblock %}

{% block header %}Child Header{% endblock %}

{% block content %}
    <h1>Welcome to the child page!</h1>
{% endblock %}

在这个子模板中,{% extends 'base.html' %}标签表示这个模板继承自base.html。然后,我们使用{% block %}标签来重写父模板中的一些块,例如titleheadercontent

当Django渲染这个子模板时,它会将base.html中的内容和子模板中的内容合并在一起。在这个例子中,合并后的HTML代码如下所示:

代码语言:html
复制
<!DOCTYPE html>
<html>
<head>
   <title>Child Title</title>
</head>
<body>
   <header>Child Header</header>
    <main>
        <h1>Welcome to the child page!</h1>
    </main>
   <footer>Default Footer</footer>
</body>
</html>

可以看到,子模板中重写的块已经替换了父模板中的内容,而没有重写的块则保留了父模板中的内容。

总之,Django中的模板继承是一种非常有用的功能,可以帮助你更好地组织和重用你的代码,提高代码的可维护性和可扩展性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django url补充以及模板继承

DjangoURL补充 默认值 在url写路由关系时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root"}), 这样在视图函数,就可以获取这个默认参数...print(k,v) 则可以看到整个请求头信息 模板继承 ?...如果自己网站每个页面都有上面这个部分,如果我们在每个页面都重复写这段代码就会很麻烦,并且改动起来也需要每个都改动,为了这种需求,模板继承可以解决这个问题 把相同东西写入到模板,如果某个部分不同则...: {% block content(这里是自定义名字) %}{% endblock %} 而在要继承模板代码首先: {% extends "tp.html" %}  表示要继承模板 {% block...content(这个名字和在模板定义名字保持一致) %} 用户管理 {% endblock %} 这样就继承模板内容 具体代码如下: 模板中代码如下tp.html: <!

1.1K60

Django 2.1.7 模板继承

相关篇章 Django 2.1.7 创建应用模板 Django 2.1.7 配置公共静态文件、公共模板路径 Django 2.1.7 模板语言 - 变量、标签、过滤器、自定义过滤器、模板注释 参考文献...https://docs.djangoproject.com/zh-hans/2.1/topics/templates/ 模板继承 模板继承和类继承含义是一样,主要是为了提高代码重用,减轻开发人员工作量...典型应用:网站头部、尾部信息。 父模板 如果发现在多个模板某些内容相同,那就应该把这段内容定义到父模板。 标签block:用于在父模板预留区域,留给子模板填充差异性内容,名字不能相同。...为了更好可读性,建议给endblock标签写上名字,这个名字与对应block名字相同。父模板也可以使用上下文中传递过来数据。...{% extends "父模板路径"%} 子模版不用填充父模版所有预留区域,如果子模版没有填充,则使用父模版定义默认值。 填充父模板中指定名称预留区域。

88220

Django 模板继承4.2

模板继承 模板继承可以减少页面内容重复定义,实现页面内容重用 典型应用:网站头部、尾部是一样,这些内容可以定义在父模板,子模板不需要重复定义 block标签:在父模板预留区域,在子模板填充...extends继承继承,写在模板文件第一行 定义父模板base.html { %block block_name%} 这里可以定义默认值 如果不定义默认值,则表示空字符串 { %endblock%...%} 说明 如果在模版中使用extends标签,它必须是模版第一个标签 不能在一个模版定义多个相同名字block标签 子模版不必定义全部父模版blocks,如果子模版没有定义block,则使用了父模版默认值...如果发现在模板中大量复制内容,那就应该把内容移动到父模板 使用可以获取父模板block内容 为了更好可读性,可以给endblock标签一个名字 { % block block_name %}...区域内容 { % endblock block_name %} 三层继承结构 三层继承结构使代码得到最大程度复用,并且使得添加内容更加简单 如下图为常见电商页面 1.创建根级模板 名称为“base.html

58930

Django模板继承

大家好,又见面了,我是全栈君   为了在Django模板配置减少代码冗余,需使用模板继承 1. 语法 {% block classinfo %} {% endblock} 2....} #必须放在首行   继续添加内容: {%block title%}blog titles{%endblock%} (4)也可以分别在base.html或title.html写好多盒子,方法同上 {... #先继承父类,后插入数据 {% endblock %} 3....总结 (1)模板继承围绕两点:继承和扩展,有什么继承什么,扩展是盒子 (2)模板设置盒子越多越好,因为这样你想扩展时候就扩展,不想扩展时候就不扩展了 (3)为了更好可读性,你也可以给你{%...endblock %}标签一个名字,例如: {% block content %} ... {% endblock content %}  (4)不能在一个模板中使用多个相同名字block标签 发布者

67310

Django 2.1.7 模板继承

模板继承 模板继承和类继承含义是一样,主要是为了提高代码重用,减轻开发人员工作量。 典型应用:网站头部、尾部信息。...父模板 如果发现在多个模板某些内容相同,那就应该把这段内容定义到父模板。 标签block:用于在父模板预留区域,留给子模板填充差异性内容,名字不能相同。...为了更好可读性,建议给endblock标签写上名字,这个名字与对应block名字相同。父模板也可以使用上下文中传递过来数据。...{% block 名称 %} 预留区域,可以编写默认内容,也可以没有默认内容 {% endblock 名称 %} 子模板 标签extends:继承,写在子模板文件第一行。...{% extends "父模板路径"%} 子模版不用填充父模版所有预留区域,如果子模版没有填充,则使用父模版定义默认值。 填充父模板中指定名称预留区域。

25620

Django网页模板继承include与复用extends

Django使用网页模板方式分为两种, 一是建立代码块, 在新页面导入代码块, 关键词为include 二是建立模板,新页面在模板基础上扩充, 关键词为extends 导入代码块 include...にいるなら わたしのことなどどうか 忘れてください 就请你将我一切全部遗忘吧 そんなことを心から願うほどに 这是我发自内深处唯一祈愿 今でもあなたはわたしの... {% endblock poem_content %} 小结: django适合承担比较大项目, 如果一个项目中需要生成大量网页, 那模板继与复用就是不可或缺, 使用模板好处有很多..., 最基本好处是能简化代码, 此外, django会根据模板生成完整静态网页, 这种默认后端渲染做法,非常利于seo, 提升了网站内容被搜索引擎抓取概率 include和extends可以解决大多数模板继承与复用问题..., 而且二者是支持混用, 为了将模板代码块与普通html文件区分开, 推荐做法是模板文件以下划线开头,如广告模板文件可以命名为_ad.html

1.2K10

Django模板相关

如果所有路径下都没有找到,那么会抛出一个 TemplateDoesNotExist 异常。 模板语法 模板可以包含变量, Django 在渲染模板时候,可以传递变量对应值过去进行替换。...以后在模板变量就从这个字典读取值。...' %} 模板继承 在前端页面开发。...模版继承类似于 Python 类,在父类可以先定义好一些变量和方法,然后在子类实现。模版继承也可以在父模版先定义好一些子模版需要用到代码,然后子模版直接继承就可以了。...子模板代码必须放在block,否则将不会被渲染。 如果在某个 block 需要使用父模版内容,那么可以使用 {{block.super}} 来继承

15140

用人话讲解django模板继承及包含

模板继承应用场景,比如一个网站财经新闻页面结构为顶部、正文、底部三大块,娱乐新闻页面结构和财经新闻页面结构一样,只有中间正文内容不一样,这个就用到模板继承。...使用模板继承方法,先写一个基础模板【base_html】,然后其他模板继承基础模板结构,最后重写基础模板 block 。 这样做好处是代码可以重复利用,好维护,也减少代码量。...如下图,先在 base.html 写好基础页面结构,然后在其他页面用{ % extends '基础模板路径' %} 继承基础模板结构,最后重写基础模板 block 内容。 ? ?...模板包含应用场景是,比如每个页面都会用到导航栏,可以先写个导航页面,然后在其他页面包含你写导航栏,相当于完全拷贝,使用页面不能修改包含页面的内容。 如下图: ?...项目源码地址:https://github.com/zxycode-2020/django_tutrital2 欢迎转发,再看。有问题可以留言。

92010

laravel模板继承yield和section区别

laravel模板继承,常用两种方式即为yield和section. @section('sidebar')             这是 master 侧边栏。...@show section命令正如其名字所暗示一样是用来定义一个视图区块,其中往往还有内容,模板继承时候 yield指令是用来显示指定区块内容 当子页面继承布局之后,即可使用 @section...而在 page.view ,用 @show 定义了 'zoneC',这会在执行到这里时立即显示内容,并按照模板继承机制继续覆盖内容,因此最终显示内容会是: 代码如下: ccc // 来自 page.view...这又涉及到一个 section 在模板可以多次使用问题。也即我们所定义每一个 section ,在随后模板其实是可以多次出现。...@stop 在上例,我在父级模板只定义了一个名为 "content" section,而在子模板中三次指定了这个 section 内容。

2.2K10
领券