django 模板渲染

views.py文件

def home(request):
    name = 'adrian'
    age = 18
    lst = ['喝酒','抽烟','烫头','做大保健']
    dic = {
          'key1':1,'key2':2,'key3':3
    }
    class Person:
        def p(self):
            return 'adrian'
    return render(request,'home.html',{'name':name,'age':age,'lst':lst,'dic':dic,'obj':Person()})

html文件

万能的点
<h1>{{ name }}</h1>    
<h1>{{ age }}</h1>
<h1>{{ dic.keys }}</h1>   
<h1>{{ lst.1 }}</h1>   列表直接用 . 加索引值就行,不用加中括号
<h1>{{ obj.p }}</h1>

  1. 过滤器

    在django模板语言中,通过使用过滤器来改变变量的显示

    1. 过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。
    2. 过滤器可以接受参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。
    3. 过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:', ' }}
    4. '|'左右没有空格

    length --- 用于返回值的长度 一般作用于字符串和列表等

    str = 'I love you '
    
    <h1>{{ lst|length }}</h1>
    

    default ---- 设置默认值

    <h1>{{ name1|default:'啥也没给' }}</h1>   当name1没有值或者没有定义的时候就会将默认值返回给html页面,如果name1有值就不会显示默认值
    

    filesizeformat ---- 将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如

    file_size = 156165421
    
    <h1>{{ file_size|filesizeformat }}</h1>
    
    页面显示的结果:148.9 MB
    

    slice ----- 切片

    <h1>{{ str|slice:'0:6' }}</h1>
    

    date ----- 格式化时间的方法

    <h1>{{ date }}</h1>
    <h1>{{ date|date:'Y-m-d H-i-s' }}</h1>  
    
    结果:
    Sept. 25, 2019, 8:30 p.m.
    2019-09-25 20-30-26
    

    safe ---- 告诉html页面这个字符串是安全的,所以页面会将这个字符串进行渲染,就会将这字符串渲染成一个a标签

    a_tag = '<a href="http://www.baidu.com">百度</a>'
    
    <h1>{{ a_tag|safe }}</h1>
    

    truncatechars ------- 如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。

    str = 'I love you '
    
    <h1>{{ str|truncatechars:6 }}</h1>
    
    结果:
    I l...
    

    truncatewords ----- 在一定数量的字后截断字符串,是截多少个单词。(按照单词来,其它字符都不会生效)

    str = 'I love you '
    
    <h1>{{ str|truncatewords:2 }}</h1>
    
    结果:
    I love ...
    

    cut ------- 移除value中所有的与给出的变量相同的字符串

    str = 'I love you '
    
    <h1>{{ str|cut:' ' }}</h1>
    
    结果:
    Iloveyou
    

    join ----- 连接,用给定的字符对列表中的元素进行连接

    lst = ['喝酒','抽烟','烫头','做大保健']
    
    <h1>{{ lst|join:'+' }}</h1>
    
    结果:
    喝酒+抽烟+烫头+做大保健
    
  2. 标签

    for --- 循环

    lst = ['喝酒','抽烟','烫头','做大保健']
    
    <ul>
        {% for i in lst %}
            <li>{{ i }}</li>
        {% endfor %}
    </ul>
    #结果:
    喝酒
    抽烟
    烫头
    做大保健
    
    
    # 在需要循环的列表后边加上reversed就是反向循环
    <ul>
        {% for i in lst reversed%}
            <li>{{ i }}</li>
        {% endfor %}
    </ul>
    
    #结果:
    做大保健
    烫头
    抽烟
    喝酒
    
    循环字典
     dic = {
              'key1':1,'key2':2,'key3':3
        }
    
    {% for k,v in dic.items %}
        <p>{{ k }}=={{ v }}</p>
    {% endfor %}
    
    结果:
    key1==1
    key2==2
    key3==3
    
    forloop.counter            当前循环的索引值(从1开始),forloop是循环器,通过点来使用功能
    forloop.counter0           当前循环的索引值(从0开始)
    forloop.revcounter         当前循环的倒序索引值(从1开始)
    forloop.revcounter0        当前循环的倒序索引值(从0开始)
    forloop.first              当前循环是不是第一次循环(布尔值)
    forloop.last               当前循环是不是最后一次循环(布尔值)
    forloop.parentloop         本层循环的外层循环的对象,再通过上面的几个属性来显示外层循环的计数等
    

    例如:forloop.counter

    {% for k,v in dic.items %}
        {{ forloop.counter }}
        <p>{{ k }}=={{ v }}</p>
    {% endfor %}
    
    结果:
    1
    key1==1
    2
    key2==2
    3
    key3==3
    

    for .... empty :在执行for循环没有找到可用的数据后会执行empty里边的标签

    <ul>
        {% for i in lst1%}
            <li>{{ i }}</li>
        {% empty %}
            <p>sorry,There is no element</p>
        {% endfor %}
    </ul>
    

    if 标签

        {% if %}会对一个变量求值,如果它的值是“True”(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。

    age = 18
    
    {% if age == 18 %}
        <p>adrian 18岁了</p>
    {% elif age > 18%}
        <p>adrian 大于18岁</p>
    {% else %}
        <p>adrian 小于18岁</p>
    {% endif %}
    

    with

        使用一个简单地名字缓存一个复杂的变量,多用于给一个复杂的变量起别名,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的

        例如:

        注意等号左右不要加空格。

    {% with total=business.employees.count %}
        {{ total }} <!--只能在with语句体内用-->
    {% endwith %}
    

        或

    {% with business.employees.count as total %}
        {{ total }}
    {% endwith %}
    
原文地址:https://www.cnblogs.com/zhufanyu/p/11665147.html