BookStrap之模板继承
模板继承 (extend)
Django模版引擎中最强大也是最复杂的部分就是模版继承了。模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。
通过从下面这个例子开始,可以容易的理解模版继承:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css" />
<title>{% block title %}My amazing site{%/span> endblock %}</title>
</head> <body>
<div id="sidebar">
{% block sidebar %}
<ul>
<li><a href="/">Home</a></li>
<li><a href="/blog/">Blog</a></li>
</ul>
{% endblock %}
</div> <div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
这个模版,我们把它叫作 base.html, 它定义了一个可以用于两列排版页面的简单HTML骨架。“子模版”的工作是用它们的内容填充空的blocks。
在这个例子中, block 标签定义了三个可以被子模版内容填充的block。 block 告诉模版引擎: 子模版可能会覆盖掉模版中的这些位置。
子模版可能看起来是这样的:
{% extends "base.html" %}//先写上从哪里继承的模板
{% block title %}My amazing blog{% endblock %}//用这个数据去替换掉模板里的内容
{% block content %}
{% for entry in blog_entries %}//用的是循环来显示内容
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}这个是标签的结束标志
{% endblock %}
快捷键:先写block接着按Table快捷键
extends 标签是这里的关键。它告诉模版引擎,这个模版“继承”了另一个模版。当模版系统处理这个模版时,首先,它将定位父模版——在此例中,就是“base.html”。
那时,模版引擎将注意到 base.html 中的三个 block 标签,并用子模版中的内容来替换这些block。根据 blog_entries 的值,输出可能看起来是这样的:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css" />
<title>My amazing blog</title>
</head>
<body>
<div id="sidebar">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/blog/">Blog</a></li>
</ul>
</div>
<div id="content">
<h2>Entry one</h2>
<p>This is my first entry.</p>
<h2>Entry two</h2>
<p>This is my second entry.</p>
</div>
</body>
</html>
请注意,子模版并没有定义 sidebar block,所以系统使用了父模版中的值。父模版的 {% block %} 标签中的内容总是被用作备选内容(fallback)。父标签里的block名字不能重复,不然找不到是哪个对应哪个。
如果要继承父标签的名字里面的内容可以用:
{% block menu %}
<p><h>班级信息</h></p>
{{ block.super }}//继承父亲的用这种方法
{% endblock %}
今日代码:
urls
from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^class/',views.class_info),
url(r'^studentInfo/(\d+)',views.student_info),
]
views
from django.shortcuts import render # Create your views here.
def class_info(request):
return render(request,"index3.html")
def student_info(request,id): return render(request,"studentInfo.html",{"class_id":id})
Templates
母模版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
<style>
.header {
width: 100%;
height: 40px;
background-color: #2aabd2;
} .content {
width: 100%;
height: 520px; } .left, .right {
float: left; }
.left{
width:20%;
height: 520px;
background-color: greenyellow;
}
.footer {
width: 100%;
height: 40px;
background-color: palevioletred;
}
</style>
</head>
<body>
<div class="header"></div>
<div class="content">
<div class="left">
{% block menu %}
<ul>
<li><a href="/studentInfo/6">S6</a></li>
<li><a href="/studentInfo/7">S7</a></li>
<li><a href="/studentInfo/8">S8</a></li>
</ul>
{% endblock %} </div>
<div class="right">
{% block con %} {% endblock %}
</div> </div>
<div class="footer"></div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
{% extends "base.html" %}//继承母模版
{% block con %}这里包括开始和模板的名字
<h2>首页</h2>
{% endblock %} </body>
</html>
{% extends "base.html" %}
{% block menu %}
<p><h>班级信息</h></p>
{{ block.super }}//继承父亲的用这种方法
{% endblock %}
{% block con %}
<p><h>学生信息</h></p>
<h2>第{{ class_id }}页</h2>
<h>{{ class_id }}:班</h>
{% endblock %}
ORM:
这次数据库用的是MySQL需要更改数据配置:和注销掉原来django自带的数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'crm', #你的数据库名称
'USER': 'root', #你的数据库用户名
'PASSWORD': '', #你的数据库密码
'HOST': '', #你的数据库主机,留空默认为localhost
'PORT': '', #你的数据库端口
}
}
设置前端的静态文本:
static也需要在setting里面需要修改:
STATIC_URL = '/static/'
STATICFILES_DIR=[
os.path.join(BASE_DIR,"static")
]
图书管理系统:先配置文件接着运行数据库持久化 用两行代码做数据库的持久化
M:
from django.db import models # Create your models here. class Book(models.Model):
nid=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
author=models.CharField(max_length=32)
publishDate=models.DateField()
price=models.DecimalField(max_digits=5,decimal_places=2)
V:
"""mysite1 URL Configuration The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app003 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^del/(\d+)', views.del_book),
url(r'^edit/(\d+)', views.edit_book),
url(r'^edit/', views.edit_book),
url(r'^add/', views.add_book),
]
T
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
<script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
<style>
.container {
margin-top: 100px;
}
.btn-primary{
margin-bottom: 50px; }
</style>
</head>
<body> <div class="container">
<div class="row">
<div class="col-md-6 clo-md-offset-2">
<table class=" table table-striped text-center table-bordered">
<thead>
<tr>
<th class="text-center">编号</th>
<th class="text-center">姓名</th>
<th class="text-center">作者</th>
<th class="text-center">出版日期</th>
<th class="text-center">价格</th>
<th class="text-center">操作</th>
<a href="/add/"><button class="btn btn-primary">添加</button></a>
</tr>
</thead>
<tbody>
{% for book in bookList %}
<tr>
<td>{{ book.nid }}</td>
<td>{{ book.title }}</td>
<td>{{ book.author }}</td>
<td>{{ book.publishDate|date:"Y-m-d" }}</td>
<td>{{ book.price }}</td>
<td>
<a href="/del/{{ book.nid }}"><button class="btn btn-danger"> 删除</button></a>
<a href="/edit/{{ book.nid }}"><button class="btn btn-info"> 编辑</button></a></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div> </body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<form action="/index/" method="post">
{# {% csrf_token %}#}
<p>编号:<input type="text" name="id" value={{ }}></p>
<p>书名:<input type="text" name="title" value={{ }}></p>
<p>作者:<input type="text" name="author" value={{ }}></p>
<p>出版日期:<input type="text" name="publishDate" value={{ }}></p>
<p>价格:<input type="text" name="price" value={{ }}></p>
<p><input type="submit" ></p>
</form> </body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<form action="/index/" method="post">
<p>书名:<input type="text" name="title" ></p>
<p>作者:<input type="text" name="author"></p>
<p>出版日期:<input type="text" name="publishDate"></p>
<p>价格:<input type="text" name="price"></p>
<p><input type="submit" ></p>
</form>
</body>
</html>
在后台获取数据首先想到用form表单的方法获取:request.POST.get(" ")或者request.GET.get("").在前端用句点符.获取。
BookStrap之模板继承的更多相关文章
- Python自动化之模板继承和cookie
request请求头信息 type(request) //查看类 from django.core.handlers.wsgi import WSGIRequest 结果会以字典的形式存在 reque ...
- Django(4)html模板继承、模板导入、分页实现
1.获取所有请求信息 导入模块:from django.core.handlers.wsgi import WSGIRequest request.environ:包含所有的请求信息,可以打印看一下, ...
- tp框架之模板继承
模板继承是一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区 ...
- Django 中url补充以及模板继承
Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root& ...
- Thinkphp3.2中的模板继承
1:模板继承: 是3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比 类的继承一样,模板也可以定义一个基础模板( ...
- Django1.9开发博客(6)- 模板继承
模板继承就是网站的多个页面可以共享同一个页面布局或者是页面的某几个部分的内容.通过这种方式你就需要在每个页面复制粘贴同样的代码了. 如果你想改变页面某个公共部分,你不需要每个页面的去修改,只需要修改一 ...
- thinkphp中模板继承
模板继承是3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局), ...
- python【第二十一篇】Django模板继承、分页、cookie验证
1.模板继承 母版master.html {% block title %}{% endblock %}2 {% block table-cont %}{% endblock %} 子板 {% ext ...
- php随机10-thinkphp 3.1.3 模板继承 布局
8.25 模板继承 模 板继承是3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比类 的继承一样,模板也可以定义一个 ...
随机推荐
- 【学习笔记】JS设计模式总结
前言:这段时间都在学习Vue的知识,虽然手边放着一本js高程,但确实好久没有好好复习了.温故而知新,因此特意把JS常见的设计模式总结,希望对大家有所帮助... 1. 工厂模式 释义:像工厂一样流水线般 ...
- Josephus Problem的详细算法及其Python、Java实现
笔者昨天看电视,偶尔看到一集讲述古罗马人与犹太人的战争--马萨达战争,深为震撼,有兴趣的同学可以移步:http://finance.ifeng.com/a/20170627/15491157_0. ...
- laravel使用JSON 类型方式进行存储
Laravel 从 5.0 版本开始就已支持 JSON 数据的转换,但这样做的目的只是为了方便数据处理.你的数据依然以 TEXT 类型存放在你的数据库里.不过 MySQL 从 5.7 版本起开始支持原 ...
- UserControl VS TemplatedControl
一:首先来看一下UserControl 熟悉XAML的朋友们都知道,当我们创建一个用户控件的时候,VS会自动为我们生成一个XXX.xaml文件和XXX..xaml.cs文件,XAML文件用于进行控件的 ...
- HDU6213
Chinese Zodiac Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- Docker 搭建 ELK 收集并展示 tomcat 日志
架构 前端展示 --> 索引搜索 <-- 日志提取及过滤 --> 日志缓存 <-- 日志收集 Kibana --> Elastash <-- Logstash -- ...
- Python3.4:splinter or traceback
tickts.py: #tickts.py #2018-01-22 #python 3.4 Eclipse IDE from splinter.browser import Browser from ...
- Hbase简单配置与使用
一. HBase的 二.基于Hadoop的HBase架构 HBase内置有zookeeper,但一般我们会有其他的Zookeeper集群来监管master和regionserver,Zookeeper ...
- sqoop简单配置与使用
sqoop(sql-to-hadoop) Apache Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具.它充分利用了MapReduce的并行特点以批处理的方式加快数 ...
- web全栈架构师[笔记] — 01 ECMAScript6新特性
ES6新特性 一.变量 var:重复定义不报错:没有块级作用域:不能限制修改 let:变量,不能重复定义,有块级作用域 const:常量,不能重复定义,有块级作用域 二.函数/参数 箭头函数——简写: ...