Python Web框架——Django学习的第五天(模板层和url(视图)的交互,模板层——过滤器和继承)

一:模板层——变量和标签

1.模板的变量:
在这里插入图片描述

在模板中使用变量语法:

  • {{变量名}}
  • 列表/数组:{{变量名.index}}
  • 字典:{{变量名.key}}
  • {{对象.方法}}
  • {{函数名}}
    样例:
    home.html
<h3>int 是 {{ int }}</h3>
<h3>str 是 {{ str }}</h3>
<h3>lst 是 {{ lst }}</h3>
<h3>lst 是 {{ lst.0 }}</h3>
<h3>dict 是  {{ dict }}</h3>
<h3>dict['a']{{ dict.a }}</h3>
<h3>function{{ func }}</h3>
<h3>clas_obj 是 {{class_obj.say }}</h3>

view.py

def test_template(request):
    dic = {}
    dic['int'] = 88
    dic['str'] = 'guoxiaonao'
    dic['lst'] = ['Tom','Jack','Lily']
    dic['dict'] = {'a':9,'b':8}
    dic['func'] = say_hi
    dic['class_obj'] = Dog()
    return render(request,'home.html',dic)

def say_hi():
    return 'hahaha'
class Dog():
    def say(self):
        return "wamgwang"

2.模板标签
作用:将一些服务器端的功能嵌入到模板中,例如流程控制等
标签语法:{% 标签 %} ············ {% 结束标签 %}
if标签:
语法:
在这里插入图片描述

注意:
(1)if条件表达式例可以用的运算符 == ,!=,<,>,<=,>=,in,not in,is,is not,not,adn,or
(2)在if标记中使用实际括号是无效的语法。如果您需要他们指示优先级,则用使用嵌套的if标记
官方文档:https://www.djangoproject.com/
test_if_for.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试 iffor</title>
</head>
<body>
{% if  x > 10 %}
今天天气很很好
{% else %}
今天天气非常好
{% endif %}
</body>
</html>

views.py

def test_if_for(request):
    dic = {}
    dic['x'] = 10
    return render(request,'test_if_for.html',dic)

模板标签——for标签
语法:

{% for 变量 in 可迭代对象 %}
   ````循环语句
{% empty %}
  ····可迭代对象无数据时填充的语句
{% endfor %}

在这里插入图片描述
作业:使用Django写一个运算器,运算器能够保存上次的运算结果
答案看下面

二:模板层——过滤器和继承

1.模板过滤器

  • 定义:在变量输出时对变量的值进行处理

  • 作用:可以通过使用过滤器来改变变量的输出显示

  • 语法:{{ 变量 | 过滤器1:’参数1’ |过滤器2:‘参数2’····}}

      常用过滤器
    
过滤器说明
lower将字符串转换为全部小写
upper将字符串转换为大写形式
safe默认不对变量内的字符串进行html转义
add:“n”将value的值增加n
truncatechars:‘n’如果字符串多余指定的字符数量,那么会被截断。阶段的字符串将以可翻译的省略号序列(”~~“0结尾

以上用法直接在html中的{{}}(后端像前端传数据的变量后添加即可)
样例:

<h3>str{{ str|upper }}</h3>
<h3>int{{ int|add:"60" }}</h3>

safe:不对html进行转义(即对从后台传入的数据依然按照原格式)
样例:
view.py

dic['script'] = '<script>alert(1111111)</script>

html中的代码

<h3>script {{ script|safe }}</h3>

结果该页面会弹出一个框
2.模板层——继承

模板继承可以使父模板的内容重用名字模板直接继承父模板的全部内容并可以覆盖父模板中相应的块。

语法——父模板中:

  • 定义父模板中的快block标签
  • 标识出那些在子模块中识别是允许被修改的
  • block标签:在父模板中定义,可以在子模版中覆盖

语法——子模版:

  • 继承子模版extends标签(写在模板文件的第一行)
    例如:{% extends ‘base.html' %}
  • 子模版 重写父模板中的内容块
{% block block_name %}
子模版快用来覆盖父模板中 block_name 块的内容
{% endblock block_name  %}

重写的覆盖规则:

  • 不重写,将按照父模板的效果显示
  • 重写,则按照重写效果显示

注意:

  • 模板继承时,服务器端的动态表内容无法继承
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@黑夜中的一盏明灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值