模板语法之变量:
-- 变量:相当于print打印了该变量
-深度查询-----》统一都用句点符
{模板语言注释:前端看不到} {相当于print了该变量} <h1>模板语言之变量</h1> <p>字符串:{{ name }}</p> <p>数字:{{ age }}</p> <p>列表:{{ ll }}</p> <p>元祖:{{ tu }}</p> <p>字典:{{ dic }}</p> {只写函数名:相当于函数名(),执行该函数} <p>函数:{{ test }}</p> {对象内存地址} <p>对象:{{ lqz }}</p> <p>列表套对象:{{ person_list }}</p> <p>字典套对象:{{ person_dic }}</p> <hr> <h1>深度查询</h1> <p>列表第0个值:{{ ll.0 }}</p> <p>列表第3个值:{{ ll.3 }}</p> <p>字典取值:{{ dic.name }}</p> <p>字典取列表值:{{ dic.ll }}</p> {再继续取值,继续点} <p>对象取数据属性:{{ lqz.name }}</p> <p>对象取绑定给对象的函数属性:{{ lqz.get_name }}</p> <p>对象取绑定给类的函数属性:{{ lqz.cls_test }}</p> <p>对象取静态方法:{{ lqz.static_test }}</p> <p>把对象列表中egon年龄取出来:{{ person_list.1.age }}</p> {拓展:不能调有参数的方法} <p>字符串的方法:{{ name.upper }}</p>
模板之过滤器
--语法:{{第一个参数/过滤器的名字:第二个参数}}
--常用过滤器:
-length
-default
-slice
-data
-filesizeformat
-truncatechars
-truncatewords
-safe
-add
<h1>模板语言之过滤器</h1> {后面就是个python中的函数,|前面的,是函数的第一个参数,冒号后面的是第二个参数} <p>统计字符串长度:{{ name|length }}</p> <p>统计列表长度:{{ ll|length }}</p> <p>过滤器之默认值:{{ ll2|default:'没有值' }}</p> <p> 过滤器之filesizeformat--1:{{ 2013344444444444444444444445555444444444444444444444444444444444444444444444444444444444443|filesizeformat }}</p> <p>过滤器之filesizeformat--2:{{ file_size|filesizeformat }}</p> <p>过滤器之不使用date:{{ ctim }}</p> <p>过滤器之date:{{ ctim|date:'Y-m-d' }}</p> {前闭后开区间} <p>过滤器之slice:{{ ll|slice:'2:-1' }}</p> {支持步长} <p>过滤器之slice-字符串:{{ name|slice:'0:3:3' }}</p> {三个起步} <p>过滤器之truncatechars:{{ 'dafddfafgadfgaasdgadgfadaf'|truncatechars:5 }}</p> <p>过滤器之truncatewords:{{ '我 dfaf ga dfgaas 你 dgf adaf'|truncatewords:5 }}</p> <p>过滤器之不用safe:{{ h1 }}</p> <p>过滤器之用safe:{{ h1|safe }}</p> <p>过滤器之不用safe:{{ script }}</p> {<p>过滤器之用safe:{{ script|safe }}</p>} <p>过滤器之用add:{{ 12|add:'1' }}</p> { 数字增加} <p>过滤器之用add:{{ 'egon'|add:'dsb' }}</p>
class Person(): def __init__(self, name, age): self.name = name self.age = age def get_name(self): return self.name @classmethod def cls_test(cls): return 'cls' @staticmethod def static_test(): return 'static' 模板里不支持带参数 def get_name_cs(self,ttt): return self.name lqz=Person('lqz',18) egon=Person('egon',18) person_list=[lqz,egon] person_dic={'lqz':lqz} file_size=1024 import datetime ctim=datetime.datetime.now()
模板之标签
-{% 标签 %}
-for:forloop:对象(里面有好多东西:parentloop,last,first,counter....)
empty:被循环的对象是空,才走它
for循环可以嵌套,也可以用if
-if:
{% if forloop.first %}
<p>第一次的我 </p>
{% elif forloop.last %}
<p>最后的我 </p>
{% else %}
<p>{{ foo }}</p>吧
{% endif %} -with:重命名,应用在变量名过长
********都要有结束********
<h1>模板语言之标签</h1> {{% for foo in ll %}} { {{ forloop }}} {<p>{{ forloop.first }}--->{{ forloop.counter0 }}--->{{ forloop.revcounter }}----->{{ foo }}</p>} {{% endfor %}} {{% for foo in ll %}} { {% for i in person_list %}} { 取出外层是第几次循环} { {{ forloop.parentloop.counter }}} { <p>{{ forloop.first }}--->{{ forloop.counter0 }}--->{{ forloop.revcounter }}----->{{ foo }}</p>} { {% endfor %}} {{% endfor %}} {**************循环的对象是空,才会走到empty,而不是对象里面的东西为空} {{% for foo in dic2 %}} { <p>{{ foo }}</p>} { {% empty %}} { 傻逼了} {{% endfor %}} {只循环字典的话,取到的是key值} {{% for foo in dic %}} {取到value的值} {{% for foo in dic.values %}} {取到key 和 value的值} {{% for k,foo in dic.items %}} { <p>{{ k }}----->{{ foo }}</p>} { {% empty %}} { 傻逼了} {{% endfor %}} {{% if user %}} { <a href="">退出</a>} { {% else %}} { <a href="">登录</a>} { <a href="">注册</a>} {{% endif %}} {for循环判断如果是第一次,打印第一次,其他打印正常值} {% for foo in ll %} {% if forloop.first %} <p>第一次的我 </p> {% elif forloop.last %} <p>最后的我 </p> {% else %} <p>{{ foo }}</p> {% endif %} {% endfor %} <hr> {with 相当于取别名,作用:变量太长,可以简化} {{% with name as ttt %}} { {{ ttt }}} { {{ name }}} { {{ user }}} {} {{% endwith %}} ------ {% with dic.ll.2 as ttt %} {{ ttt }} {{ ttt }} {% endwith %}
自定义标签和过滤器
标签不能用在if判断,过滤器,可以用在if判断
-自定义过滤器
-1 先app是不是已经在setting中注册
-2 在app下创建一个templatetags(****名字不能变***)的文件夹(模块)
-3 在模块下创建一个py文件,名字随意:mytag.py
-4 # 第一步,导入template
from django.template import Library
# 第二步,定义一个叫register的变量=template.Library() r
egister = Library()
-5 写一个函数,用@register.filter(name='yyy')装饰一下(可以指定别名)
def str_add(str1, str2): #一定要有返回值
# 业务逻辑很复杂
return str1 + str2
-6 在模板里:(新定定义的标签,过滤器,都要重启程序)
-{% load mytag %}
-{{'lqz'|str_add:'nb'}}
-自定义标签:
-1-4:前4步,根过滤器的定义完全一样
-5 只是装饰器不一样
@register.simple_tag()
def add_nb(value):
return value+'nb'
-6 在模板里:(多个参数,以空格区分)
-{% load mytag %}
-{% add_nb 'lqz'%}