s14_03_模板语言

模板语言    
    
- 特殊的模板语言
    # {{ 变量名 }}
    # view.py
    def func(request):
        return render(request, "index.html", {'current_user': "alex"})

    # index.html
    <html>
        <body>
            <div>{{current_user}}</div>
        </body>
    </html>
    
    #最后生成的字符串
    <html>
        <body>
            <div>alex</div>
        </body>
    </html>
    
- For循环:

    def func(request):
        return render(request, "index.html",{、
                        current_user': "alex",
                        'user_list': ['alex','eric']})
    
    # index.html

        <div>{{current_user}}</div>
        <ul>
            {% for row in user_list %}
                {% if row == "alex" %}
                    <li>{{ row }}</li>
                {% endif %}
            {% endfor %}
        </ul>
    
- 索引

    def func(request):
        return render(request, "index.html", {
                    'current_user': "alex",
                    'user_list': ['alex','eric'],
                    'user_dict': {'k1': 'v1', 'k2': 'v2'}})

    # index.html
        <div>{{current_user}}</div>
        <a> {{ user_list.1 }} </a>
        <a> {{ user_dict.k1 }} </a>
        <a> {{ user_dict.k2 }} </a>

- 条件:

    def func(request):
        return render(request, "index.html", {
                    'current_user': "alex",
                    "age": 18,
                    'user_list': ['alex','eric'],
                    'user_dict': {'k1': 'v1', 'k2': 'v2'}})
    # index.html
        <div>{{current_user}}</div>
        <a> {{ user_list.1 }} </a>
        <a> {{ user_dict.k1 }} </a>
        <a> {{ user_dict.k2 }} </a>
        {% if age %}
            <a>有年龄</a>
            {% if age > 16 %}
                <a>老男人</a>
            {% else %}
                <a>小鲜肉</a>
            {% endif %}
        {% else %}
            <a>无年龄</a>
        {% endif %}
        
- 字典循环

    # USER_DICT = {
    #     'k1':'root1',
    #     'k2':'root2',
    #     'k3':'root3',
    #     'k4':'root4',
    # }            
        
    {{ user_dict.k1 }}
    <ul>
        {% for k in user_dict.keys %}
            <li>{{ k }}</li>
        {% endfor %}
    </ul>
    <ul>
        {% for val in user_dict.values %}
            <li>{{ val }}</li>
        {% endfor %}
    </ul>
    <ul>
        {% for k,row in user_dict.items %}
            <li>{{ k }}-{{ row }}</li>
        {% endfor %}
    </ul>    
    
- 再举例

    render(request, "模板的文件的路径",
            {'obj': 1234,
            'k1': [1,2,3,4],
            "k2": {'name': '张扬','age': 73}})

    <h1> {{ obj }} </h1>
    <h1> {{ k1.3 }} </h1>
    <h1> {{ k2.name }} </h1>
    {% for i in k1 %}
        <p> {{ i }} </p>
    {% endfor %}
    
    {% for row in k2.keys %}
        {{ row }}
    {% endfor %}
    
    {% for row in k2.values %}
        {{ row }}
    {% endfor %}
    
    {% for k,v in k2.items %}
        {{ k }} - {{v}}
    {% endfor %}

    
- 模板继承extends

    - 模板master中,变化部分用标记占位
    
        {% block content %}
        {% endblock %}
        
        {% block title %}
        {% endblock %}
    
    - 子板中顶部先声明引用,只写block的内容
    
        {% extends 'master.html' %}
    
        {% block title %}标题{% endblock %}
    
        {% block content %}
            “子板内容”
        {% endblock %}             

    - 子板css
    
        在 模板<stytle></stytle> 下方进行单独block
        {% block css %} {% endblock %}
        
    - 子板JS
    
        在 模板<script></script> 下方进行单独block
        {% block js %}     {% endblock %}                
    
    # 子板中block顺序随意
    # 一个子板只能有一个模板
    
    
    
- 模板导入include
    
    - 定义tag.htm(放在templates)
    
    - 使用处
        
        {% include 'tag.html' %}
        
    # tag.html 如有模板语言,django回渲染
    # 一个页面可以有多个tag        
    
- 内置函数

    {{ item.event_start|date:"Y-m-d H:i:s"}}
    {{ bio|truncatewords:"30" }}
    {{ my_list|first|upper }}
    {{ name|lower }}

- 自定义函数

    simple_tag
        a. app下创建templatetags目录
        
        b. 任意xxoo.py文件
        
        c. 创建template对象 register
        
        d.
            from django import template
            from django.utils.safestring import mark_safe
               
            register = template.Library()
            
            @register.simple_tag
            def func(a1,a2,a3....)
                return " a1 + a2"                        
                
        e. settings中注册APP
        
        f. 顶部 {% load xxoo %}
        
        g. {% 函数名 arg1 arg2 %}
        
        
        # 不能作为if条件
        
        # 参数任意
            
    filter
    
        a. app下创建templatetags目录
        
        b. 任意xxoo.py文件
        
        c. 创建template对象 register
        
        d.
            from django import template
            from django.utils.safestring import mark_safe
               
            register = template.Library()
            
            @register.filter
            def func(a1,a2)
                return "asdfasd"
                
        e. settings中注册APP
        
        f. 顶部 {% load xxoo %}, 若有extend,则extend 在最上面
        
        g. {{ 参数1|函数名:"参数二,参数三" }} {{ '参数1'|函数名:'数字' }}
        
        
        # 能作为if条件
        
        # 最多两个参数,不能加空格       

posted @ 2020-01-18 21:26  badweather  阅读(54)  评论(0编辑  收藏  举报