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)    收藏  举报

导航