• 【Django】:模板语言


    排序

    1、forloop.counter 表示循环的次数,它从1开始计数,第一次循环设为1

    {% for item in todo_list %}  
        <p>{{ forloop.counter }}: {{ item }}</p> 
    {% endfor %}
    

    2、forloop.counter0 表示循环的次数,它从0开始计数,第一次循环设为0

    {% for item in todo_list %}  
        <p>{{ forloop.counter0 }}: {{ item }}</p> 
    {% endfor %} 
    

    3、forloop.revcounter  示循环中剩下的items数量,第一次循环时设为items总数,最后一次设为1

    {% for item in todo_list %}  
        <p>{{ forloop.revcounter }}: {{ item }}</p> 
    {% endfor %}
    

    4、forloop.revcounter0 类似于forloop.revcounter,但它是表示的数量少一个,即最后一次循环时设为0

    {% for item in todo_list %}  
        <p>{{ forloop.revcounter0 }}: {{ item }}</p> 
    {% endfor %}
    

    5、forloop.first 当第一次循环时值为True,在特别情况下很有用)

    {% for object in objects %}  
         {% if forloop.first %}<li class="first">{% else %}<li>{% endif %}  
         {{ object }}  
        </li> 
    {% endfor %}
    

    6、forloop.last 当最后一次循环时值为True 

    {% for link in links %}{{ link }}{% if not forloop.last %} | {% endif %}{% endfor %}
    

    7、forloop.parentloop 在嵌套循环中表示父循环的forloop:

    {% for country in countries %}  
        <table> 
         {% for city in country.city_list %}  
            <tr> 
                <td>Country #{{ forloop.parentloop.counter }} </td> 
                <td>City #{{ forloop.counter }}</td> 
                <td>{{ city }}</td> 
            </tr> 
         {% endfor %}  
        </table> 
    {% endfor %} 
    

    继承 

    1、模板继承允许你建立一个基本的”骨架”模板, 它包含你所有最常用的站点元素 并 定义了一些可以被子模板覆盖的block

    父模板(master.html):

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}{% endblock %}</title>
        <style>
            .body-header{
                background-color: black;
            }
        </style>
    </head>
    <body>
    

    HTML页面:

    {# 指定继承的模板 #}
    {% extends 'master.html' %}
    
    {# 指定替换的位置 #}
    {% block title %}
        tp1
    {% endblock %}
    
    {# 指定替换的位置 #}
     {% block content %}
        <p>tp1</p>
     {% endblock %}
    

    注:一个html页面只能继承一个父模板,不能继承多个

    2、模板导入定制的组件include

    组件(tag.html):

    form>
        <input type="text" name="user"/>
        <input type="submit" value="提交"/>
    </form>
    

    HTML页面:

    {# 指定继承的模板 #}
    {% extends 'master.html' %}
    
    {# 指定替换的位置 #}
    {% block title %}
        tp1
    {% endblock %}
    
    {# 指定替换的位置 #}
    {% block content %}
        <p>tp1</p>
    
        {# 导入单独组件 #}
        {% include 'tag.html' %}
    {% endblock %}
    

      

    Simplelistfilter

    有时候我们需要在html上对后台渲染的页面进行二次处理,比如把字符串的首字母大写、字符进行计算操作等

    1、django默认自带方法

    {{ item.event_start|date:"Y-m-d H:i:s"}}    #日期格式进行转换
    {{ bio|truncatewords:"30" }}                  #取字符串前30位
    {{ my_list|first|upper }}                     #第一个字符大写              
    {{ name|lower }}                                #所有字符小写
    

    2、自定义simple_tag、filter

     在app中创建templatetags文件夹

     templatetags中创建任意 .py 文件,如:handle.py

    from django import template
    from django.utils.safestring import mark_safe
    
    register = template.Library()
    
    @register.simple_tag()
    def sub(a1,a2):    #能添加多个参数
    
        return a1 + a2
    
    @register.filter()  
    def lzl(a1,a2):    #只能传入两个参数
    
        return a1 + a2
    

    ③ 在settings中配置当前app,不然django无法找到自定义的simple_tag

    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'cmdb',
    )
    

    导入和使用simple_tag、filter

    {# 导入py文件名 #}
    {% load handle %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
            <div>{{ name|lower }}</div>
            <div>{{ name|upper }}</div>
    
            {% sub 1 2 %}
    
            {{ 'hello'|lzl:'world'}}
    </body>
    </html>
    
    {#页面内容#}
    {#3 helloworld#}
    

      

    3、django数据库choice获取字段

    device_status_choices = (
            (1, '上架'),
            (2, '在线'),
            (3, '离线'),
            (4, '下架'),
        )
        device_type_id = models.IntegerField('设备类型',choices=device_type_choices, default=1)
    
     <td colspan="4">{{ response.data.asset.get_device_status_id_display }}</td>
    

      

    详细-》》http://www.cnblogs.com/mfryf/archive/2012/07/17/2595019.html

    《第二十章》

  • 相关阅读:
    C#事件和委托的区别
    已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10()随机1~10
    如何搭建github+hexo博客-转
    ngRouter和ui-router区别
    JS数组追加数组采用push.apply的坑(转)
    vue中关于computed的一点理解
    simplify the life ECMAScript 5(ES5)中bind方法简介
    github使用-知乎的某小姐的一篇文章
    Jade 模板引擎使用
    玩转Nodejs日志管理log4js(转)
  • 原文地址:https://www.cnblogs.com/lianzhilei/p/6268138.html
Copyright © 2020-2023  润新知