Python大神 - Django(深层学习)-- 模板语言
寄语:
模板语言:模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。
模板(template)中也有自己的语言,该语言可以实现数据展示
一、继承(include,extend)
a.完全一致
{% include xxx.html %}
b.继承模板,设计自己特立的部分({% block block_name %}{% endblock %})
母版:{% block title %}{% endblock %}
子版:{% extend xxx.html%}
{% block block_name %}{% endblock %}
二、数据获取
获取单个:{{ item }} 循环:{% for item in item_list %} <a>{{ item }}</a> {% endfor %} forloop.counter # 计算器,从1开始,forloop.counter
forloop.first # 第一次循环 forloop.last # 最后一次循环
三、判断
{% if ordered_warranty %} {% else %} {% endif %} {% if not ordered_warranty %} {% else %} {% endif %} {% if sort == 'courses' or sort == 'org' or sort == 'teacher' % } {% else %} {% endif %} {% if sort == 'courses' and sort == 'org' % } {% else %} {% endif %} 注:or与and不可放进同一逻辑里 {% if sort == 'courses' % } {% else %} {% endif %} {% ifequal sort 'courses' %}active{% endifequal %}
四、模板语言里提供的方法
1 2)stringformat(数据类型的转换) 4 # 数据类型的转换 5 {% ifequal city.id|stringformat:'i' city_id %}active2{% endifequal %} 6 7 3)分割(路径分割)--slice 8 {% if request.path|slice:'7' == '/course' %}{% endif %} 9 10 4)显示有choice字段的命名(get_degree_display) 11 {{ request.user.get_degree_display }} 12 13 5)divisibleby标签的意义是用后面的参数去除,除尽为True,否则为False。 14 {% if forloop.counter|divisibleby:2 %} 15 16 6)代码表示:5/1 *100,返回500,widthratio需要三个参数,它会使用 参数1/参数2*参数3,所以要进行乘法的话,就将参数2=1即可 Django模版除法 17 {% widthratio 5 1 100 %} 18 19 7)定制日期显示模式 20 {{ item.event_start|date:"Y-m-d H:i:s"}} 21 22 8) 23 {{ bio|truncatewords:"30" }} 24 25 9)首字母大写 26 {{ my_list|first|upper }} 27 28 10)变小写 29 {{ name|lower }}
11)放置CSRF攻击
{% csrf_token %} # form表单使用
xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}"); # 用POST提交必须请求头带csrf_token # post 方法下使用
五、自定义simple_tag
a、在app中创建templatetags模块 b、创建任意 .py 文件,如:xx.py #!/usr/bin/env python #coding:utf-8 from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def my_simple_time(v1,v2,v3): return v1 + v2 + v3 @register.simple_tag def my_input(id,arg): result = "<input type='text' id='%s' class='%s' />" %(id,arg,) return mark_safe(result) c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名 {% load xx %} d、使用simple_tag {% my_simple_time 1 2 3%} {% my_input 'id_username' 'hide'%} e、在settings中配置当前app,不然django无法找到自定义的simple_tag INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', )