django-7.django模板继承(block和extends)

前言

打开一个网站时候,点导航栏切换到不同的页面,发现导航部分是不变的,只是页面的主体内容变了,于是就可以写个母模板,其它的子页面继承母模板就可以了。

母模板

可以在母模板中添加多个块标签,每个块标签取不同的名称,如下格式,context是块标签名称

{% block content %} {% endblock content %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>母模板</title>
</head>
<body>
<section>
    <h1>顶部导航</h1>
    <p>python自动化-上海-悠悠</p>
    <hr>
</section>

<!--这是一段注释。block是一个块标签, content是标签名称-->
{% block content %} {% endblock content %}

<p>---------自动化教程---------</p>

<!--这是一段注释。block是一个块标签, ad是标签名称-->
{% block ad %} {% endblock ad %}

<section>
    <br><br><br><br><hr>
    <h1>底部导航</h1>
    <p>底部一些友情链接啊,网站导航,版权啊</p>
</section>
</body>
</html>

也可以给块标签添加默认值,如:

<!--这是一段注释。block是一个块标签, 可以给默认值-->
{% block defaut %}
<p>如果子页面中,没填充此block内容,这里的就是默认内容</p>
{% endblock defaut %}

子页面

extends继承母模板的页面内容,填充 block块标签内容,指定对应的名称就可以了。不是所有的block都需要填充,如果母模板中blcok有默认内容,子模板不填充的话,就显示默认的内容。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>子页面</title>
</head>
<body>

<!--这是一段注释。extends继承basepage.html页面-->
{% extends "basepage.html" %}

{% block content %}
    <p>这里是content块的填充内容</p>
{% endblock content %}

{% block ad %}
<ul>自动化内容</ul>
    {% for i in ads %}
    <li>{{i}}</li>
     {% endfor %}
{% endblock ad %}

</body>
</html>

views与urls

上面子模板里面有给for循环,参数是ads,在views视图函数里面添加context 参数
hello/views.py视图函数

from django.shortcuts import render
from django.http import HttpResponse, Http404

# Create your views here.

def sonpage(request):
    context = {"ads": ["selenium", "appium", "requests"]
               }
    return render(request, ‘sonpage.html‘, context)

urls.py添加访问路径

from django.conf.urls import url
from django.urls import re_path, path
from hello import views
urlpatterns = [
    path("sonpage/", views.sonpage),
]

打开浏览器输入地址:http://127.0.0.1:8000/sonpage/ 就能访问到页面了

备注:子模板也可以结合使用上一篇提到的include语法:

{% include ‘end.html‘ %}

原文地址:https://www.cnblogs.com/jason89/p/10359380.html

时间: 2024-10-12 06:41:42

django-7.django模板继承(block和extends)的相关文章

Django框架之模板继承和静态文件配置

https://www.cnblogs.com/haiyan123/p/7731959.html 一.模板继承 目的是:减少代码的冗余 语法: {% block classinfo %} {% endblock %} 具体步骤: 1.创建一个base.html文件, 2.把要显示的页面的内容写在这里面,也就是html要在浏览器显示的内容 3.在right里面写个盒子 {% block classinfo %} {% endblock %} 在这里面写个空盒子,以后谁来扩展就在这个盒子里面添加相应

Django学习【第4篇】:Django之模板继承

Django框架之模板继承和静态文件配置 一.模板继承 目的是:减少代码的冗余 语法: {% block classinfo %} {% endblock %} 具体步骤: 1.创建一个base.html文件,2.把要显示的页面的内容写在这里面,也就是html要在浏览器显示的内容3.在right里面写个盒子 {% block classinfo %} {% endblock %}在这里面写个空盒子,以后谁来扩展就在这个盒子里面添加相应的内容就行了 4.然后再创建一个.html文件,让这个继承ba

Flask基础(14)--&gt;模板代码的复用【宏(Macro)、继承(Block)、包含(include)】

宏 对宏(macro)的理解: 把它看作 Jinja2 中的一个函数,它会返回一个模板或者 HTML 字符串 为了避免反复地编写同样的模板代码,出现代码冗余,可以把他们写成函数以进行重用 需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复 定义宏 {% macro input(name,value='',type='text') %} <input type="{{type}}" name="{{name}}" value=&q

反向解析_模板继承_html 转义

反向解析 根据url正则生成一个地址 href = "{% url 'booktest:show' %}" 正则如果分组了,分几个组就传几个参数,反向解析就需要传参,直接空格再后面写就可以了,如: {% url 'booktest:show' 'p1' 'p2' %} 好处:动态生成链接地址,降低维护成本 示例 # views.py def reverse(request): return render(request, 'reverse.html') def test(request

Django 模板继承

在Django网页开发中,一个网站的不同页面都存在大量相同的布局,如果在每一个页面都写上相同的代码,那个维护的工作量就太大了.为了减少不必要的重复工作,Django允许开发者定义基本的模板,然后其他的页面继承这个模板的布局. 例如:首先我创建一个模板文件 layout.html layout.html,注意在这个模板里面,我使用了一个新的模板语言{% block name%}, name可以自己取,这样凡是继承这个模板的页面,在新的页面里面,只需要把自己的内容放在同名的{%block name%

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

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

django基础知识之模板继承:

模板继承 模板继承可以减少页面内容的重复定义,实现页面内容的重用 典型应用:网站的头部.尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义 block标签:在父模板中预留区域,在子模板中填充 extends继承:继承,写在模板文件的第一行 定义父模板base.html { %block block_name%} 这里可以定义默认值 如果不定义默认值,则表示空字符串 { %endblock%} 定义子模板index.html { % extends "base.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(继承)模板标签 先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载.

Django框架(八)—— 模板层:模板导入、模板继承、静态文件

模板导入.继承.静态文件 一.模板导入 要复用一个组件,可以将该组件写在一个文件中,在使用的时候导入即可 在模板中使用 1.语法 {% include '模板名字' %} 2.使用 ad.html页面 <div class="adv"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-t