• Django模版层


    1. 解析:
    2. forloop内置对象:运行结果解析
    3. 'counter0': 从0开始计数
    4. 'counter' : 从1开始计数
    5. 'first': True,判断循环的开始
    6. 'last' : Tues,判断循环的结束

    模版变量的书写

    我们可以在html中编写python代码。

    演示:

    1. {{ 填写变量 }}
    2. {% 填写类的 %}
    3. {{ d.0 }}
    4. {{ d.1 }}
    5. {{ d.3 }}
    6. {{ user_dict.hobby.2 }}
    7. {{ index }}
    8. {{ obj.score }}

    过滤器(内置函数)

    语法格式

    {{ 变量名称|过滤器名称(函数名):变量 }}

    过滤器功能示例
    default如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。{{ value|default:"nothing"}}
    length对于字符串列表这类有length属性的,得到其值{{ value|length}}
    filesizeformat将传入的数字当做文件的字节数,将其处理成合适展示的文件大小,如2048就会展示为2 KB{{ value|filesizeformat }}
    slice对字符串进行切片{{value|slice:"2:-1"}}
    add将传入的数字或字符串做相加或拼接处理{{value|add:1}}
    safe模板语法默认转义带html语法的文本,safe取消标签文本转义,让其可以被html渲染{{ value|safe}}
    truncatechars如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。{{ value|truncatechars:9}}
    truncatewords在一定数量的字后截断字符串,处理同上...。{{ value|truncatewords:9}}
    cut移除value中所有的与给出的变量相同的字符串如果value为'i love you',那么将输出'iloveyou'.{{ value|cut:' ' }}
    timesincedatetime数据距离现在的时间(从现在起){{ blog_date|timesince }}
    timeuntildatetime数据距离现在的时间(到现在止){{ blog_date|timesince }}
    datedatetime数据字符化输出{{ value|date:"Y-m-d H:i:s"}}

    示例:

    default

    1. def func(request):
    2. a = True
    3. return render(request, 'func.html', locals())
    4. # 过滤器
    5. {{ a|default:'hello' }}

    length

    1. def func(request):
    2. a = True
    3. ll = [1, 2, 3, 4, 5]
    4. return render(request, 'func.html', locals())
    5. #过滤器
    6. {{ ll|length }}

    filesizeformat

    1. def func(request):
    2. size = 123456789
    3. return render(request, 'func.html', locals())
    4. # 过滤器
    5. {{ size|filesizeformat }}

    slice

    1. def func(request):
    2. user = 'helloworld'
    3. return render(request, 'func.html', locals())
    4. {{ user|slice:"2:-1"}}

    date

    1. def func(request):
    2. import datetime
    3. date_1 = datetime.datetime.now()
    4. return render(request, 'func.html', locals())
    5. {{ date_1|date:"Y-m-d-H:i:s" }}

    truncatechars

    1. def func(request):
    2. res = 'ssahjkdhasjdhkashdjshadsjahs'
    3. return render(request, 'func.html', locals())
    4. {{ res|truncatechars:6 }}

    safe

    1. def func(request):
    2. need = '

      标题

      '
    3. return render(request, 'func.html', locals())
    4. {{ need|safe }}

    模版标签

    定义:Django模版层的标签可以用来展示数据、控制流程、渲染HTML、处理表单等等

    格式{% tag%}...标签内容...{% endtag%}

    for标签

    1. def login(request):
    2. user_dict = {'name': 'kk', 'age': 19, 'gender': 'male', 'salary': 22222}
    3. return render(request, 'login.html', locals())
    4. {% for dict in user_dict %}
    5. {{ forloop}}
    6. {{ dict }}
    7. {% endfor %}

    解析:

    1. 解析:
    2. forloop内置对象:运行结果解析
    3. 'counter0': 从0开始计数
    4. 'counter' : 从1开始计数
    5. 'first': True,判断循环的开始
    6. 'last' : Tues,判断循环的结束

    for循环

    遍历(循环)字典里的数据

    1. {% for key,val in user_dict.items %}
    2. {{ key }}:{{ val }}
    3. {% endfor %}
    4. {% for key in user_dict.keys %}
    5. {{ key }}
    6. {% endfor %}
    7. {% for val in user_dict.values %}
    8. {{ val }}
    9. {% endfor %}
    10. {% for item in user_dict.items %}
    11. {{ item }}
    12. {% endfor %}

    if标签

    if标签支持的有:if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。

    1. def login(request):
    2. num = 80
    3. return render(request, 'login.html', locals())
    4. {% if num > 100 or num < 0 %}
    5. 分数无效

    6. {% elif num >= 90 and num <= 100 %}
    7. {% elif num <= 90 and num >= 80 %}
    8. 还凑合

    9. {% elif num <= 80 and num >= 70 %}
    10. 一般

    11. {% else %}
    12. 太差了

    13. {% endif %}

    演示for循环与if标签的混合使用

    1. def login(request):
    2. l1 = [1, 2, 3, 4, 5]
    3. return render(request, 'login.html', locals())
    4. {% for foo in l1 %}
    5. {% if forloop.first %}
    6. 第一个数:{{foo}}

    7. {% elif forloop.last %}
    8. 最后一个数:{{ foo }}

    9. {% else %}
    10. {{ foo }}
    11. {% endif %}
    12. {% endfor %}

    with

    1. def login(request):
    2. d = {'name': 'kk', 'age': 19, 'gender': 'male', 'salary': 22222, 'love': ['football', 'singer', 'play_game']}
    3. return render(request, 'login.html', locals())
    4. {% with d.love as ss %}
    5. {{ ss }}

    6. {{ d.love}}

    7. {% endwith %}

    自定义标签

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

    2、在app中创建templatetags模块(模块名只能是templatetags

    3、创建任意 .py 文件,如:my_tags.py

    1. from django import template
    2. from django.utils.safestring import mark_safe
    3. register = template.Library() #register的名字是固定的,不可改变
    4. @register.filter
    5. def filter_multi(v1,v2):
    6. return v1 * v2
    7. @register.simple_tag
    8. def simple_tag_multi(v1,v2):
    9. return v1 * v2
    10. @register.simple_tag
    11. def my_input(id,arg):
    12. result = "" %(id,arg,)
    13. return mark_safe(result)

    模版的继承和导入

    模板的继承

    当我们多个页面有相似的页面,我们可以采用下列方法

    1.我们直接复制粘贴>>>创建一个新的html

    2.模板的继承

    1. 1.在模板中使用block划定子板>>方便以后修改的区域
    2. {% block 区域名称 %}
    3. {% endblock%}
    4. 2.子版继承母板
    5. {% extends 'home.html'%}
    6. {% block 区域名称 %}
    7. 子板自己的内容
    8. {% endblock%}
    9. 注意:子板也可以继续使用子模板的内容
    10. {{block.super}}

    在原html中找到想要修改的区域,使用{%block%}之后把想要继承的区域放进去以{%endblock%}结尾

    新建一个html文件后使用{% extends加上我们所继承html文件%}编写新建的样式等,之后使用endblock结尾,这样页面就修改完成了。

    一个继承的html应该有三个区域:css区域,js区域,页面等例:{%block css%}就是写css的区域

  • 相关阅读:
    AUTOSAR规范与ECU软件开发(实践篇)10、AUTOSAR技术展望
    fleek 第一次节点测试
    esdump离线安装
    Guava Cache使用
    浅析 spring 事件驱动
    python模块之redisbloom redis布隆过滤器
    论文阅读:How Do Neural Networks See Depth in Single Images?
    NK-RTU980 USB bulk传输
    CobalStrike(CS)上线隐藏IP和流量
    用户运营中,怎么做好用户增长?
  • 原文地址:https://blog.csdn.net/weixin_49210718/article/details/134421662