【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

《第二十章》

原文地址:https://www.cnblogs.com/lianzhilei/p/6268138.html