链条传动

砥砺前行,不忘初心!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
模版
    a. 模版渲染的过程

    b. {{ xx }}  # 取单值
        - views.py
            def template(request):
                return render(request, 'template.html', {'k1': 'v1', 'k2': [1, 2, 3], 'k3': {'name': 'alex'}})
        - template.html
            {{ k1 }}  ==>结果:v1
            {{ k2.1 }}  ==>结果:2     # 列表取值,相当于k2[1]
            {{ k3.name }} ==>结果:alex  # 字典取值

    c.  {% for item in k2 %}  # for循环取值
            <p>
                {{ item }},
                {{ forloop.counter }},  # 索引(从1开始)
                {{ forloop.counter0 }}, # 索引(从0开始)
                {{ forloop.first }},    # 判断是否是第一个(是则返回True)
                {{ forloop.last }},     # 判断是否是最后一个(是则返回True)
                {{ forloop.revcounter }}  # 倒序显示
            </p>
        {% endfor %}


        {% if 1 > 2 %} # if语句,elif和else有则写,没有则不写
            <h1>123</h1>
            {% elif 1 == 2 %}
                <h1>456</h1>
            {% else %}
                <h1>789</h1>
        {% endif %}


    d. 模版语言的内置方法
        常用帮助方法:
            {{ item.event_start|date:"Y-m-d H:i:s"}}  # 将时间item.event_start转换成"Y-m-d H:i:s"这样的格式
            {{ bio|truncatewords:"30" }}  # 只显示字符串bio的前30个字符
            {{ my_list|first|upper }}  # 将字符串my_list的第一个字符变成大写
            {{ name|lower }}  # 将name的值转换成小写(大写用upper)。例:{{ k1|lower }}

    e. 自定义方法
        两类自定义方法:
            filter
            simple_tag

        filter方法步骤:
            1、在APP中创建指定文件夹,名称不能改 templatetags
            2、templatetags中创建任意 .py 文件,如:xx.py

                from django import template
                from django.utils.safestring import mark_safe

                register = template.Library()  # 这句代码必须不变(一个字都不能变)

                # 创建函数
                @register.filter
                def f1(value):
                    return value + "666"

                @register.filter
                def f2(value,arg):
                    return value + "666" + arg
            3、使用1:在html模版的头部执行
                {% load xx %}  # 导入自定义的xx.py文件

            4、使用2:
                k1 = 'VVV'
                {{k1}}    => vvv
                {{ k1|f1 }} # 使用自定义的f1方法()
                {{k1|f2:"alex"}} => vvv666  # 使用自定义的f2方法()。f2需要传入两个参数,除了本身需要的k1外,还需要传入一个参数,格式是f2:"xx"   xx是另一个参数
                # 自定义方法最多只能传两个参数,要是再多只能自己进行构造了

            5、 settings.py 中注册app
                mysite
                    mysite
                        - settings.py
                            INSTALLED_APPS = [
                                ... ...
                                'app01',
                            ]

        simple_tag方法步骤:
            1、在APP中创建指定文件夹,名称不能改 templatetags
            2、templatetags中创建任意 .py 文件,如:xx.py

                from django import template
                from django.utils.safestring import mark_safe

                register = template.Library()  # 这句代码必须不变(一个字都不能变)

                # 创建函数
                @register.simple_tag
                def f2(s1, s2, s3, s4):
                    return s1 + s2 + s3 + s4
            3、使用1:在html模版的头部执行
                {% load xx %}  # 导入自定义的xx.py文件

            4、使用2:
                {% f2 1 2 3 4 %}  # 使用自定义f2函数,后面跟参数,用空格隔开。f2函数有几个参数就传几个参数

            5、 settings.py 中注册app
                mysite
                    mysite
                        - settings.py
                            INSTALLED_APPS = [
                                ... ...
                                'app01',
                            ]

        总结:
            filter
                限制:传参个数有限制,最多只能传2个
                支持:模版语言的 if 条件
                    例:f3为自定义filter方法
                        {% if k1|f3 %}   #k1|f3的结果可以作为if的条件
                            <h1>True</h1>
                            {% else %}
                                <h1>False</h1>
                        {% endif %}
            simple_tag
                不支持:模版语言的 if 条件。

    f. 模版的继承
        母板:
                ... ...
                {% block 名称 %} {% endblock %}
                ... ...

        子板:
                {% extends '母板html文件名' %}

                {% block 名称 %}
                    具体子页面的内容...
                {% endblock %}

    g. include
        小组件: x.html
        {% include 'x.html' %}  # 引用这些小组件

 

posted on 2017-01-05 16:49  链条君  阅读(346)  评论(0编辑  收藏  举报