day77-78
上节内容回顾
分组
sql和ORM:
单表分组
select max(salary) from emp group by pro
ORM: Emp.objects.values('dep').annotate(a=Avg(salary)).values('dep','a')
多表分组
select dep.name,avg(salary) from emp inner join dep on (dep_id=dep.id)group by dep_id
ORM: Emp.objects.all().annotate(avg=Avg('emp__salary')).values('avg','name')
queryset.annotate:按照select字段,进行分组。
ORM跨表分组
时间归档
知识点一:
sqlite数据库:strftime(fmt,date)
mysql 数据库:DATE_FORMAT(date,fmt) 依照指定的fmt格式化日期date值
知识点二:
queryset才能调用它
跟annotate类似,也是增加一个新字段
extra函数
#查询归档时间
date_list = models.Article.objects.filter(user=user).extra(select={'create_ym':"date_format(create_time,'%%Y-%%m')"}).values('create_ym').annotate(c=Count('nid')).values_list('create_ym','c')
模板的继承,只是继承样式,不继承数据
在base.html中先造盒子:{% block content%}
{% endblock content%}
在子模板中: {% extends 'base.html'%}
{% block content%}
<p>自己写的东西</p>
{% endblock content%}
模板使用,在子继承中使用:{% include ‘menu.html’ %}
自定义标签和过滤器:
在app下新建templatetags文件(文件夹名必须是他),下建立mytags.py文件,里面写 from django import template
register = template.Library()
@register.simple_tag
def mul(x,y):
return x*y
在模板中调用:
{% load my_tags%}
{% mul 3 5%}
{% inclusion_tag%} 把include,和tag结合在一起了
将数据与样式he为一个整体。
django, 他也会将字符串存入数据库,将html标签转义为特殊字符,传递给浏览器进行显示。而不是在收到特殊标签的时候,就拒绝存入数据库。入数据库的是原标签,django模板给转义了,|safe 参数。
<script type="text/javascript">document.write("Hello World!")</script>
模板渲染的时候,如果多次涉及到跨表查询,那么效率就会变低,那么可以在源表加字段,进行单表查询
在html中,可以直接使用{{request.user.username}},不用声明变量,因为他会直接渲染。
在JS中使用需要加个引号"{{request.user.username}}"
posted on 2018-10-10 17:31 castiel_lee 阅读(76) 评论(0) 收藏 举报
浙公网安备 33010602011771号