17)django-模板的继承与导入
情况1:通常写页面都有个模板用来框定头部LOGO页面,左侧导航菜单,只有右部的内容不同。如果不使用模板就大量重复工作。
特别如果头部或者左侧导航需要修改或者添加,所有页面都需要修改。django 通过模板继承解决。
情况2:一个页面如果内容特别多,不可能都一起写同一个页面。比如京东首页内容非常多。如何解决了?django通过include导入其他页面。
一:模版继承
1)继承使用
步骤1:母板里写入block,就可以被继承,content是名称
{% block title %}
{% endblock%}
{% block “content“ %}
{% endblock%}
步骤2:子页面通过extends指定继承那个模板
{% extends 'master.html'%} #继承那个模板
{% block “content“ %} 这个地方就是替换模板block “content“
<ul>
{% for i in u%}
<li>{{i}}</li>
{%endfor%}
{% endblock%}
2)如果子页面有自己的css,js 怎么用了?
A)如果是在子页面写CSS和JS,CSS就不是在头部了,而JS也不是在<body>之前,假如要引用jquery,子页面写的JS会在jquery引用前面,就会不生效
B)继承CSS与JS都是共有的。
解决方法:
在模板里css 和js位置在写个block块。然后在block里引入,在这个block写自己的js和css
注:block和顺序没有关系
二:模板引入使用
3)一个页面只能继承一个模板,如何解决了?如何使用多个模板,或者引入其他页面
<% include "a.html" %> 可以引用多次
4)模板,include,子页面怎么渲染?
先把自己渲染成字符串,在拿模板和include渲染,所以不存在渲染问题(可以把子页面继承include当做一个整页面)
三:示例
#url.py
url(r'^tpl1$',views.tpl1),
url(r'^tpl2$',views.tpl2),
url(r'^tpl3$',views.tpl3), #views.py def tpl1(request):
u=[1,2,3]
return render(request,"tp1.html",{"u":u}) def tpl2(request):
name="alex"
return render(request,"tp2.html",{"name":name}) def tpl3(request):
status="已修改"
return render(request,"tp3.html",{"status":status}) #模块:master.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
{% block title %}{% endblock %} <!--这里用来设置标题-->
</title>
<link rel="stylesheet" href="/static/common.css"> {% block css %}<!--这里用来设置子页面自己的css-->
{% endblock %}
</head>
<body>
{% block content %}<!--这里用来设置子页面自己的内容-->
{% endblock %}
<script src="/static/js/jquery-1.12.4.js"></script>
<script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
{% block js %}<!--这里用来设置子页面自己的js-->
{% endblock %}
</body>
</html> #子页面:tp1.html
{% extends "master.html" %} <!-- 继承那个模板--> {% block title %}
用户管理
{% endblock %} {% block css %}
<style>
body{
background-color: aqua;
}
</style>
{% endblock %} {% block content %}
<h1>用户管理</h1>
<ul>
{% for i in u %}
<li>{{ i }}</li>
{% endfor %}
</ul>
{% endblock %}
#子页面:tp2.html
{% extends "master.html" %} {% block content %}
<h1>修改密码{{ name }}</h1>
{% include "tp3.html" %} <!-- 引入其他页面-->
{% endblock %} #include页面:tp3.html
<div>
<input type="text">
<input type="button" value="++">
</div>
17)django-模板的继承与导入的更多相关文章
- Django 你需要掌握的模型层(标签、过滤器、模板的继承与导入)
Django 模型层(标签.过滤器.模板的继承与导入) 好文章来自超哥:https://www.cnblogs.com/guanchao/p/11006062.html 过滤器/自定义过滤器 模板 ...
- Django模板的继承与模板的导入
目录 一:模版的继承 1.什么是模板继承? 2.使用继承流程原理 3.模板继承语法 二:模板的继承使用 1.案例需求 2.总结模板继承 三:模版的导入 1.模板导入 2.模板导入格式 3.模板导入使用 ...
- Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)
摘要: 模版层(模板语法) 模板语法 过滤器 标签 自定义过滤器.标签 inclusion_tag 模板的继承 模板的导入 一.模板语法: 常用语法:{{ }} 变量相关{% %} ...
- Django 模型层(标签、过滤器、模板的继承与导入)
过滤器/自定义过滤器 模板语法中的过滤器类似于python中的内置方法,在我们把数据从后端通过rander传入到前端html文件中之后,在前端我们可以通过模板语法,对传入的数据再进行以通骚操作. 首先 ...
- django的模板的继承与导入
1.模板继承 母版中需要继承的地方: {% block content %} {% endblock %} 对应的子版中文件最开头写: {% extends 'head_demo.html' %} 然 ...
- Django模板的继承
一.extend 1.extend继承模板 2.一个文件中只能继承一个模板 3.extend继承模板中的所有内容,模板的内容包括:html的head和body ,eg:
- 19 01 17 Django 模板 返回一个页面
模板 问题 如何向请求者返回一个漂亮的页面呢? 肯定需要用到html.css,如果想要更炫的效果还要加入js,问题来了,这么一堆字段串全都写到视图中,作为HttpResponse()的参数吗?这样定义 ...
- Django模板及表查询笔记
模板层 后端朝html页面传递数据 两种给html页面传递数据的方式 第一种: render(request,'index.html',{'user_list':user_list}) 第二种 ren ...
- Django模板层学习笔记
一. 前言 Django模板层的知识包括标签.过滤器.自定义标签.自定义过滤器以及inclusion_tag,最重要的是模板的继承和导入. 首先模板层最重要的是模板语法,之前我们提过涉及到变量用模板语 ...
随机推荐
- JS获得元素相对位置坐标getBoundingClientRect()
getBoundingClientRect用于获取某个元素相对于视窗的位置集合.集合中有top, right, bottom, left等属性. 1.语法:这个方法没有参数. rectObject = ...
- C# string 保留数字英文字母
using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressi ...
- Quartz.NET 配置文件详解
Ø 前言 在之前的 使用 Topshelf 结合 Quartz.NET 创建 Windows 服务 文章中,使用到了 Quartz 的两个配置文件 quartz.config 和 quartz_jo ...
- Cisco Common Service Platform Collector - Hardcoded Credentials(CVE-2019-1723)
Cisco Common Service Platform Collector - Hardcoded Credentials 思科公共服务平台收集器-硬编码凭证(CVE-2019-1723) htt ...
- Java Web之JSTL标准标签库总结
[文档整理系列] Java Web之JSTL标准标签库总结
- UE4 位置转换相关函数
get mouse positionget mouse position scaled by dpiget viewport scaleDeproject Scence to WorldLocal T ...
- 剑指Offer-把数组排成最小的数
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 思路 可以看 ...
- mysql连接报java.math.BigInteger cannot be cast to java.lang.Long异常
使用hibernate出现以下错误 java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot b ...
- 【运维】略谈Raid级别
*何为Raid? Raid就是磁盘阵列(Redundant Arrays of Independent Disks,RAID),有"独立磁盘构成的具有冗余能力的阵列&quo ...
- 消息队列:JMS之基本概念介绍
摘要:The Java Message Service (JMS) API is a messaging standard that allows application components bas ...