[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'}})
View Code

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是转换大写函数
View Code

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不行
View Code

 

posted @ 2017-11-07 11:34  liuzhipenglove  阅读(1671)  评论(0编辑  收藏  举报