Django 第六课 【模板继承】

在前端页面开发中,有些代码是需要重复使用的。这种情况可以使用 ’include‘ 标签来实现。也可以使用另外一个比较强大的方式来实现,那就是模板继承。模板继承类似于 ’python‘ 中的类,在父类中可以先定义好一些变量和方法,然后在子类中实现,模板继承也可以在父模板中先定义好一些子模板需要用到的代码。然后子模板直接继承就可以了,并且因为子模板肯定有自己不同的代码,因此可以在父模板中定义一个block接口,然后在子模板再去实现,以下是父模板的代码:

{% load static %}
<! DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href= "{% static ‘style.css‘ %}"/>
<title>{% block title %}我的站点{% endblock %}</title>
</head>

<body>
<div id="sidebar">
{% block sidebar %}
<ul>
{% endblock %}
</div>
<div id="content">
{% block content %} {% endblock %}
</div>
</body>

这个模板,我们取名叫做 ’base.html‘ ,定义好一个简单的 ’html‘ 骨架,然后定义好俩个 ’block‘接口,让子模板来根据具体需求来实现。子模板然后通过 ’extends‘ 标签来实现,示例代码如下:

{% extends "base.html" %}

{% block title %} 博客列表 {% endblock %}

{% block content %}

{% for entry in blog_entries %}
<h2> {{ entry.title }} </h2>
<p> {{ entry.body}} </p>
{% endfor %}
{% endblock %}

需要注意的是:extends 标签必须放在模板的第一行。

子模板中的代码必须放在block中,否则将不会被渲染

如果在某个 ’block‘ 中需要使用父模板的内容,那么可以使用 ’{{block.super}}‘来继承,比如上列子, ’{% block titkle %}‘,如果想使用父模板的 ’title‘,那么可以在子模板的 ’title block‘ 中使用 ’{{ block.super }}‘

在定义 ’block‘ 的时候,除了在 ’block‘ 开始的地方定义这个 ’block‘ 的名字, 还可以在 ’block‘ 结束的时候定义名字, 比如 ’{% block title %} {% endblock title %}‘ 。这在大型模板中显得尤其有用,能让你快速的看到block在哪里

原文地址:https://www.cnblogs.com/nelsen-chen/p/9451936.html

时间: 2024-11-07 03:20:22

Django 第六课 【模板继承】的相关文章

django基础知识之模板继承:

模板继承 模板继承可以减少页面内容的重复定义,实现页面内容的重用 典型应用:网站的头部.尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义 block标签:在父模板中预留区域,在子模板中填充 extends继承:继承,写在模板文件的第一行 定义父模板base.html { %block block_name%} 这里可以定义默认值 如果不定义默认值,则表示空字符串 { %endblock%} 定义子模板index.html { % extends "base.html" %

django第四课 模板标签,继承与引用

pycharm 远程同步配置 会出问题 不自动同步 1.常用的模板标签 -作用是什么? -常用标签 总结:语法 {% tag %} {% endtag %} {% tag 参数 参数 %} 案例: views.py设置把里面的index 里面的students以表格形式显示 1 def index(request): 2 3 students = [ 4 {'id': 10, 'name': '张三', 'age': 18, 'sex': '男'}, 5 {'id': 11, 'name': '

django第三课 模板变量及过滤器

1.模板路径的查找 - 查找顺序, - 会首先查找TEMPLATES里面的DIRS TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'templets')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_proce

第四十六课、继承中的构造与析构

一.子类对象的构造方法 1.子类中可以定义构造函数 2.子类构造函数:必须对继承来的成员进行初始化 (1).直接通过初始化列表或者赋值方式进行初始化(但可能继承来的是private成员) (2).调用父类构造函数进行初始化 A.默认调用:适用于无参构造函数和使用默认参数的构造函数 B.显示调用:通过初始化列表进行调用(适用于所有父类的构造函数) #include<iostream> #include<string> using namespace std; class Parent

django第六课 模型第一讲

1.数据库连接配置: django 连接mysql的配置流程: - 安装 pymysql pip install pymysql - 创建数据库用户 有创建数据库权限的用户 - 创建数据库 create database crm - 修改配置 settins 1 DATABASES = { 2 'default': { 3 'ENGINE': 'django.db.backends.mysql', 4 'NAME': 'crm', 5 'USER':'root', 6 'PASSWORD':''

django 第六课 模型第二讲

1.常用的字段类型 官方文档地址 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 2.字段的常用参数 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-options 3.常用查询 通过模型类上的管理器来构造QuerySet 模型类上的管理是啥? 模型类型.objects QuerySet 表示数据库种对象的集合,等同于Select

Django中模板总结[模板语言,模板继承,CSRF攻击,反向解析]

模板 概述 作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器.模版致力于表达外观,而不是程序逻辑.模板的设计实现了业务逻辑view与显示内容template的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用. 创建模板文件夹 在项目的文件里面定义一个templates文件夹 在创建的文件夹里面再创建一个文件夹为每个应用的html文件夹 起名为和应用名同名的文

[py]django模板继承

参考 django模板继承 通过搞一个base.html 这个base.html可以包含两类 block片断 其他html 然后index.html继承base.html 继承关系如图 代码体现template继承 关键字 - 预设片断模板- 留坑 {% block title %} 默认标题 {% endblock %} - 预包含html文件 {% include 'nav.html' %} - index.html继承base.html {% extends 'base.html' %}

Python学习---django模板继承180123

django模板继承  --20180123 a.include 模板标签 b.extend(继承)模板标签 ------include 模板标签 该标签允许在(模板中)包含其它的模板的内容. 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串. 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 {% include %} 来减少重复. ------extend(继承)模板标签 先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载.