一.模板的导入和继承
如何引入静态文件(static目录的配置)
模板的导入:
1.写一个好看的模板
2.在想用的地方
{% include '好看的模板的名字.html' %}
模板的继承
写一个母版,base.html(留一些block(盒子)),留的盒子越多,可扩展性就越高
{% block top %}
{% endblock %}
使用:
在一个新的html中
{% extend 'base.html' %}
扩写留的对应的盒子
{% block top %}
扩写的内容
{% endblock %}
注意:
1.扩写的时候,盒子的位置无所谓,只要名字对应正确,就会正确填充
2.盒子可以不扩写,不写就是原来的样子
3.如果要显示母版盒子中原来的东西,需要
{{block,super}}----写在哪,原来的内容就放在哪
4.静态文件相关
1.直接写死的:<link rel = "stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
2.用static标签:
{% load static %}
<link rel = "stylesheet" href = "{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}">
3.用get_static_prefix:
{% load static %}
<link rel = "stylesheet" href="{% 用get_static_prefix %}bootstrap-3,3,7-dist/css/bootstrap.css">
5.inclusion_tag:返回html片段
1.前面几步跟标签和过滤器一样
2.装饰器: @register.inclusion_tag('inclusiontag.html',name='lqz'),第一个参数是要操作的模板
3.返回一个字典,字典中的值,可以在inclusiontag中使用
6.模型层:
单表操作:
增加,删,改:两种方式:queryset对象的方法,book对象的方法
改:需要用save()
get()方法:查询的数据有且只有一条,如果多,少,都抛异常
单表查询
<1> all(): 查询所有结果
<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
<3>get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误.
<4>exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
<5>order_by(*field): 对查询结果排序('-id')
<6>reverse(): 对查询结果反向排序
<7>count(): 返回数据库中匹配查询(QuerySet)的对象数量
<8>first(): 返回第一条记录
<9>last(): 返回最后一条记录
<10>exists(): 如果QuerySet包含数据,就返回True,否则返回False
<11>values(*field): 返回一个ValueQuerySet--一个特殊的QuerySet,运行后得到的并不是系列model的实例化对象,而是一个可迭代的字典序列
<12>values_list(*field): 它与values()非常相似,它返回的是一个元祖序列,values返回的是一个字典序列
<13>distinct(): 从返回结果中剔除重复记录
单表基于双下划线的模糊查询
Book.objects.filter(price_in=[100,200,300])
Book.objects.filter(price__gt100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__gte=100)
Book.objects.filter(price__lte=100)
Book.objects.filter(price__range=[100,200])
Book.objects.filter(title__contains="python")
Book.objects.filter(title__icontains="python")
Book.objects.filter(title__startswith="py")
Book.objects.filter(pub_date__year=2012)