python测试开发django(7)--django模板继承(block和extends)
前言
打开一个网站时候,带你导航栏切换到不同的页面,发现导航部分是不变的,只有页面的主体内容变了,于是就可以写个母模板,其它的子页面继承母模板就可以了。
母模板
可以在母模板中添加多个块标签,每个块标签取不同的名称,如下格式,content是块标签名称;块标签名称可以随意命名;
{% 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是一个块标签,tagg/abc/hi是标签名称---> {% block tagg %} <p>如果子页面中,没有填充此block内容,我就是默认内容</p> {% endblock tagg %} <p>----------自动化教程----------</p> {% block abc %} {% endblock abc %} {% block hi %} <p>如果子页面中,没有填充此hi内容,我就是默认内容</p> {% endblock hi %} <section> <br><br><br><br><hr> <h1>底部导航</h1> <p>底部一些友情链接啊,网站导航,版权啊</p> </section> </body> </html>
xjyn/templates/mother.html(文件名可以随意命名)文件内容如上;
也可以给块标签添加默认值,如:
{% block tagg %} <p>如果子页面中,没有填充此block内容,我就是默认内容</p> {% endblock tagg %}
子页面
extends继承母模板的页面内容,填充block块标签内容,指定对应的名称就可以了。不是所有的block都需要填充,如果母模板中block有默认内容,子模板不填充的话,就显示默认的内容。如果母模板中block没有默认内容(abc),且字模板未使用该block(abc),则不显示也不报错;xjyn/templates/son.html内容如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>子页面</title> </head> <body> {% extends "mother.html" %} {% block tagg %} <p>哈喽,everybody,欢迎你观看我的博客园</p> {% endblock tagg %} {% block abc %} <ul>自动化内容</ul> {% for i in c %} <li>{{i}}</li> {% endfor %} {% endblock abc %} </body> </html>
views与urls
上面子模板里面有给for循环,参数是c(此参数必须与html中的保持一致,不然(自动化内容)结果为空),在views视图函数里面添加cont参数(参数名可随意定义)
xjyn/views.py视图函数
from django.shortcuts import render from django.http import HttpResponse,Http404 # Create your views here. def he(request): cont={"c":["selenium","requests","jmeter"]} return render(request,"son.html",cont)
urls.py添加访问路径
#helloworld/helloworld/urls.py from django.conf.urls import url from django.urls import re_path,path from xjyn import views urlpatterns=[ url("^s/$",views.he), ]
打开浏览器输入地址:http://127.0.0.1:8000/s/,就能访问到页面了
备注:子模板也可以结合使用上一篇提到的include语法:
{% include 'end1.html' %}