[oldboy-django][2深入django]django模板使用函数
1 模板引入子html--include
7 模板引擎 - 母版 - include,导入公共的html a. 用法:{% include "pub.html" %}, pub.html还可以添加 {{ name }} b. 一个页面可以导入多次,一个html只能有一个母版 c.样例 # public.html <div class="public"> <div class="content"> {{ userinfo }} </div> </div> # app02_test.html <h3>include</h3> {% include "public.html" %} {% include "public.html" %} # views def test(request): return render(request, 'app02_test.html', {'userinfo':{'k1':'v1', 'k2': 'v2'}})
2 模板使用(渲染数据 + 调用函数)
- 模板 - 接收被渲染数据 views参数传递:{'userInfo': {'k1': 'v1', 'k2':'v2'}} 前端接收可以 {% for v in userInfo.values %} {% endfor %} 或者 {% for k,v in userInfo.items %} {% endfor %} 或者 {% for k in userInfo.keys %} {% endfor %} - 模板执行函数, 而且函数不是js函数,而是py里面的函数 a.{{ name|upper}} // name是后台传递给前端的带渲染数据,upper是转换大写函数
3 自定义函数,供模板调用
- 自定义模板filter a.在应用创建文件夹templatetags b.创建任意py文件, xx.py from django import template register = template.Library() @register.filter def my_upper(value): return value.upper() c.在模板文件导入xx.py 开头导入 {% load xx %} d.在模板使用函数 {{ 'liuzhipeng'|my_upper}} ,前面的liuzhipeng为参数传递给my_upper e. 一定要注册app_02 - 自定义tag a.在应用创建文件夹templatetags b.创建任意py文件, xx.py from django import template register = template.Library() @register.simple_tag def my_concat(arg1, arg2): return arg1 + arg2 c.在模板文件导入xx.py 开头导入 {% load xx %} d.在模板使用函数tag {% my_concat "alex" "is sb" %} e. 一定要注册app_02 - filter 和simple_tag区别 a. filter最多能有两个参数 b. filter模板调用方式: {{ 参数|函数}} c. simple_tag参数个数无限制 d. simple_tag使用方式:{% 函数 参数 参数 %} e. {% if name|my_bool %} 可以这样使用filter,而tag则不能 f. simple_tag反向生成url {% url 'url别名' %} g. 可以{% if name|my_bool %}, 但是simple_tag不行