一,模板的导入
把需要导入的那一部分代码写到新的html文件下面,在导入的那个位置写({% include '文件名' %})即可
下面是总文档
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>tamplate</title> <link rel="stylesheet" href="../static/bootstrap-3.3.7-dist/css/bootstrap.css"> <style> h1 { text-align: center; } </style> </head> <body> <div class="container-fluid"> <div class="row"> <div class="head"> <div class="page-header"> <h1>正页的标题<small>副标题</small></h1> </div> </div> {% include 'template2.html' %} <div class="col-md-9"> </div> </div> </div> </body> </html>
下面是需要导入的那部分代码
<div class="col-md-3"> <div class="panel panel-primary"> <div class="panel-body"> 弃医从文 </div> <div class="panel-footer">弃医从文</div> </div> <div class="panel panel-success"> <div class="panel-body"> 狂人不狂 </div> <div class="panel-footer">狂人不狂</div> </div> <div class="panel panel-info"> <div class="panel-body"> 狂人不狂 </div> <div class="panel-footer">狂人不狂</div> </div> <div class="panel panel-warning"> <div class="panel-body"> 淋漓尽致 </div> <div class="panel-footer">淋漓尽致</div> </div> <div class="panel panel-danger"> <div class="panel-body"> 一针见血 </div> <div class="panel-footer">一针见血</div> </div> </div>
二,模板的继承
写一个母版,留一个可以扩展的盒子,在子模板中对盒子进行设置
下面是母版
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>tamplate</title> <link rel="stylesheet" href="../static/bootstrap-3.3.7-dist/css/bootstrap.css"> <style> h1 { text-align: center; } </style> </head> <body> <div class="container-fluid"> <div class="row"> <div class="head"> <div class="page-header"> <h1>正页的标题<small>副标题</small></h1> </div> </div> {% include 'template2.html' %} <div class="col-md-9"> <div class="right_top" style="height: 100px;background: #5bc0de"> {#这是给后面继承此页面的东西添加一个可以操控的盒子#} {% block content_top %} {% endblock %} </div> <div class="right_middle" style="height: 200px; background: #5cb85c"> </div> {#一个页面可以设置多个操控的盒子#} {% block content %} {% endblock %} </div> </div> </div> </body> </html>
下面是对母版的继承
{#直接继承base.html文件中的布局 #} {% extends 'base.html' %} {# 设置布局中,content盒子,这里添加内容 #} {% block content %} <p>这是9的区域</p> <p>这是9的区域</p> {# 这是把父级这个盒子里面存在的内容继承过来,可以继承多次,没继承一次,出现一次内容 #} {{ block.super }} <p>这是9的区域</p> <p>这是9的区域</p> <p>这是9的区域</p> <p>这是9的区域</p> {{ block.super }} {% endblock content%} {# 一个页面可以设置多个盒子,多个盒子的可操控的可能就多了 #} {% block content_top %} 我是模版一内容頭部 {% endblock content_top%}
三,静态文件相关的导入
可以有三种方法,1,直接把路径写死了,2,经过传参进行路径的拼接3,经过一个内置函数,得到静态文件的地址,然后对地址进行拼接
1,写死的静态文件 <link rel="stylesheet" href="/static/css/mycss.css"> 2,使用static标签函数: -{%load static%} #static返回值,会拼上传参的路径 -{% static "传参"%} 3,使用get_static_prefix标签获取静态文件的路径 -{%load static%} #get_static_prefix返回值是:静态文件的地址,相当于/static/ -{% get_static_prefix %}css/mycss.css
四,单表操作:
1,数据迁移命令:python3 manage.py makemigrations--->只是对变化做一个记录,记录文件在app的migrations
python3 manage.py migrate---->把更改提交到数据库
python3 manage.py showmigrations----->查询哪个没有提交到数据库
在django框架中,也可以直接写一个Py文件进行右击执行,在主目录下面创建一个Py文件然后里面加入
import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day76orm.settings") import django django.setup() from app01 import models
import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "work.settings") import django django.setup() from app1 import models # 新增的两种方式 # 1,返回的结果是一个对象 # book = models.Book.objects.create(name='西游记', price=76, publish='人民出版社', author='曹雪芹', create_data='2018-09-17') # print(book.name) # book = models.Book(name='红楼梦', price=56, publish='清华大学出版社', author='曹雪芹', create_data='2018-06-04') # book.save() # print(book.name) # 时间格式可以传字符串,也可以传时间格式 # import datetime # ctime = datetime.datetime.now() # book = models.Book.objects.create(name='水浒传', price=76, publish='人民出版社', author='施耐庵', create_data=ctime) # print(book.name) # 删除叫西游记的这本书(可以不加first,加上表示只删除第一个,不加则叫西游记的书全部删除) # ret = models.Book.objects.filter(name='西游记').first().delete() # print(ret) # 返回值有两个值,第一个是影响的行数,第二个是删除的对象 # 下面把西游记这本书的作者改了,有两种方法1,直接Update更改,2,先搜寻出来然后在更改,改完必须保存 # ret = models.Book.objects.filter(name='西游记').update(author='吴承恩') # print(ret) # 返回值是更改的个数 # ret = models.Book.objects.filter(name='西游记').first() # ret.price = 23.8 # ret.save() # 接下来是查询,查询的方法需要记忆的内容比较多,同时也是比较重要的内容 # all()查询所有结果,返回值是把所有对象查出来,然后放到一个queryset对象里面去 # ret = models.Book.objects.all() # print(ret) # filter()寻找满足括号里面条件的值,里面可以传多个参数,用逗号分隔,他们之间是and的关系, # 而且搜寻出来的结果可能是一个列表,然后通过方括号取值,不支持负号取值 # ret = models.Book.objects.filter(name='西游记')[0] # print(ret) # 输出的值是models中__str__的返回值.本身是一个对象,不具有.方法 # ret.query -->queryset对象打印sql(就是把其中内部的代码打出来) # get() 有且只有一个值的时候才可以使用,如果只有一个值(多个值时会报错),则返回的是一个对象而不是queryset对象,一般用在id的查询 # ret = models.Book.objects.get(id=2) # print(ret) # exclude()查询的是不满足括号里面的所有值,如果是多个条件的话,每个条件之间的and并且直接取反 # ret = models.Book.objects.exclude(name='西游记') # order_by 按价格升序排列(如果加负号,则是降序排列) # ret=models.Book.objects.all().order_by('price') # print(ret) # queryset对象可以继续 点 方法取出名字叫西游记并且升序排列 # ret=models.Book.objects.all().order_by('price').filter(name='西游记') # print(ret) # reverse()经过排序过的对象可以使用这个对其进行反序排列 # ret = models.Book.objects.all().order_by('-price').reverse() # print(ret) # count 查询结果个数 # ret=models.Book.objects.all().filter(name='西游记').count() # print(ret) # last 返回book对象(查找结果中最后一个值) # ret=models.Book.objects.all().last() # 查询的结构是否存在,返回的结果是布尔值 # print(ret)objects.filter(name='三国演义').exists() # print(ret) # values(*field): queryset对象里套字典(字典里面存在的内容) # ret=models.Book.objects.all().values('name','price') # ret=models.Book.objects.all().values('name') # print(ret) # value_list queryset对象里套元组 # ret=models.Book.objects.all().values_list('name','price') # print(ret) # distinct() 必须完全一样,才能去重(把括号里面重复的内容只显示一个) 只要带了id,去重就没有意义了 # ret=models.Book.objects.all().values('name').distinct() # print(ret) # =========基于双下划线的模糊查询 # 查询价格大于89 的书 # ret=models.Book.objects.filter(price__gt='89') # print(ret) # 查询价格小于89 的书 # ret=models.Book.objects.filter(price__lt='89') # print(ret) # ret=models.Book.objects.filter(price__lt='89',price='89') # 小于等于 # ret=models.Book.objects.filter(price__lte='89') # 大于等于, # ret = models.Book.objects.filter(price__gte='89') # print(ret) # in 在XX中 # ret=models.Book.objects.filter(price__in=['23.8','89','100']) # print(ret) # print(ret.query) # range 在XX范围内 between and # ret=models.Book.objects.filter(price__range=[50,100]) # print(ret.query) # contains 查询名字有'%红%'的书 # ret=models.Book.objects.filter(name__contains='红') # print(ret) # print(ret.query) # icontains 查询名字带p的书,忽略大小写 # ret=models.Book.objects.filter(name__icontains='P') # print(ret) # print(ret.query) # startswith 以XX开头 # ret=models.Book.objects.filter(name__startswith='红') # print(ret) # print(ret.query) # endswith 以XX结尾 # ret=models.Book.objects.filter(name__endswith='梦') # print(ret) # pub_date__year 按年查询 # ret=models.Book.objects.filter(create_data__year='2017') # print(ret)