Django之模板层

【1】模板之变量

在Django模板中要想使用变量关键是使用点语法。

获取值的语法是:{{ 变量名 }}

Python中所有的数据类型包括函数,类等都可以调用

【2】模板之过滤器

  • 过滤器语法
    • {{ obj | filter_name:param }}
      • obj:变量名字,filter_name:过滤器名称,param:变量
  • default过滤器
    • 如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值
    • 语法:{{ value | default:'onthing' }}
  • length过滤器
    • 返回值的长度。对列表和字符串都起作用
    • 语法:{{ value | length }}
  • filesizeformat过滤器
    • 将值格式化为一个人类可读的文件尺寸(例如:13KB,4.1MB等)
    • 语法:{{ value | filesizeformt }}
  • date过滤器
    • 如果value=datetime.datetime.now(),返回当前的时间
    • 语法:{{ value | date:"Y-m-d" }}
  • slice过滤器
    • 切分,如果value=' helloworld '
    • 语法:{{ value | slice:"2:6"}}
  • truncatechars过滤器
    • 如果字符串多于指定的字符数量,那么会被截断。截断的字符串将以(.....)结尾
    • 参数:要截断的字符数
    • 语法:{{ value | truncatechars:6}}
  • safe过滤器
    • 取消对HTML标签和js等语法标进行自动转义
    • 语法:{{ value | safe }}

在Django中有两种方法关闭HTML的自动转义:

1、通过safe过滤器

2、通过django内部的mark_safe方法:

python 复制代码
from django.utils.safestring import mark_safe

    def index(request):

        res = mark_safe('<a>hello</a>')
    return render(request,'index.html')

    '''然后在index.html中使用{{ res }}查看结果'''

【3】模板之标签

【3.1】for标签

for标签:遍历每一个元素

语法:

python 复制代码
# 循环一个字典



{% for user in user_dict %}
    <p>{{ user }}</p>
{% endfor %}

{% for key,value in user_dict.items %}
    <p>{{ key }}:{{ value }}</p>
{% endfor %}

{% for user in user_dict.items %}
    <p>{{ user }}</p>
{% endfor %}

{% for user in user_dict.keys %}
    <p>{{ user }}</p>
{% endfor %}

{% for user in user_dict.values %}
    <p>{{ user }}</p>
{% endfor %}

'''
items:拿到字典key值和value值

keys:只拿到字典的key值

value:只拿到字典的value值
'''


{% for user in user_dict %}
    <p>{{ forloop }}</p>
{% endfor %}


'''
循环序号可以通过{{forloop}}显示
 
指定{{forloop}}后会打印出以下的值
    
{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 3, 'revcounter0': 2, 'first': True, 'last': False}

    counter0:代表的是索引数
    counter:代表是的顺序
    first:代表的第一个
    last:代表的最后一个
'''
 
【3.2】for......empty标签

for标签带有一个可选的{% empty %} 从句,以便在循环的对象为空或者没有找到时,可以有所操作

语法:

python 复制代码
{% for person in person_list %}
    <p>{{ person.name }}</p>

{% empty %}
    <p>sorry,no person here</p>
{% endfor %}

'''
person_list为空或者找不到时会执行{% empty %}中的p标签的执行
'''
【3.3】if标签

{% if %}会对一个变量求值,如果它的值是True(存在,不为空,且不是false),对应的内容块会输出。总而言之就是和python中的if语句使用方法类似

语法:

python 复制代码
def index(request):
    num=89
return render(request,'index.html')

{% if num > 100 or num < 0 %}
    <p>无效</p>
{% elif num > 80 and num < 100 %}
    <p>优秀</p>
{% else %}
    <p>凑活吧</p>
{% endif %}

if语句支持 and、or、==、>、<、!=、<=、>=、in、not in、is、is not判断

【3.4】with标签

使用一个简单的名字缓存一个复杂的变量,简而言之就是起别名

语法:

python 复制代码
def index(request):
    d = {'username':'kevin','age':18,'info':'这个人有点意思','hobby':[111,222,333,{'info':'NB'}]}
return render(request,'index.html')





# with起别名
{% with d.hobby.3.info as nb  %}
    <p>{{ nb }}</p>
    在with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式
    <p>{{ d.hobby.3.info }}</p>
{% endwith %}

【4】模板之导入

  • 模板导入就是将一个html文件导入到另一个html文件之中
  • 语法
    • {% include ' 模板名称 ' %}
    • 在导入文件中写导入

【5】模板之继承

模板继承可以让您继承另一个模板的所有元素,还可以定义能够被字模板覆盖的block

  • 继承的语法:
    • {% extends '被继承的模板' %}

block标签定义了3个可以被字幕版内容填充的block。block模板告诉模板引擎:字幕版可能会覆盖掉模板中的这些位置

block独立块的语法:

{% block 名字(随意) %}

''要覆盖的内容''

{% endblock %}

相关推荐
Asthenia041237 分钟前
Spring扩展点与工具类获取容器Bean-基于ApplicationContextAware实现非IOC容器中调用IOC的Bean
后端
bobz9651 小时前
ovs patch port 对比 veth pair
后端
Asthenia04121 小时前
Java受检异常与非受检异常分析
后端
uhakadotcom1 小时前
快速开始使用 n8n
后端·面试·github
JavaGuide1 小时前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
bobz9652 小时前
qemu 网络使用基础
后端
Asthenia04122 小时前
面试攻略:如何应对 Spring 启动流程的层层追问
后端
Asthenia04122 小时前
Spring 启动流程:比喻表达
后端
Asthenia04123 小时前
Spring 启动流程分析-含时序图
后端
ONE_Gua3 小时前
chromium魔改——CDP(Chrome DevTools Protocol)检测01
前端·后端·爬虫