Django的模板语法
模版语法传值
{{}}:变量相关
{%%}:逻辑相关
def index(request): # 模版语法可以传递的后端python数据类型 n = 123 f = 11.11 s = '我也想奔现' b = True l = ['小红','姗姗','花花','茹茹'] t = (111,222,333,444) d = {'username':'jason','age':18,'info':'这个人有点意思'} se = {'晶晶','洋洋','嘤嘤'} <p>{{ n }}</p> #123 <p>{{ f }}</p>#11.11 <p>{{ s }}</p>#我也想奔现 <p>{{ b }}</p>#True <p>{{ l }}</p>#['小红', '姗姗', '花花', '茹茹', '敏敏', '新新'] <p>{{ d }}</p>#{'username': 'jason', 'age': 18, 'info': '这个人有点意思', 'hobby': [111, 222, 333, {'info': 'NB'}]} <p>{{ t }}</p>#(111, 222, 333, 444) <p>{{ se }}</p>#{'晶晶', '嘤嘤', '洋洋'} ''' 模版语法可以传递的后端python的所有数据类型 ''' def func(): print('我被执行了') return '你的另一半在等你' class MyClass(object): def get_self(self): return 'self' @staticmethod def get_func(): return 'func' @classmethod def get_class(cls): return 'cls' # 对象被展示到html页面上 就类似于执行了打印操作也会触发__str__方法 def __str__(self): return '到底会不会?' obj = MyClass() return render(request,'index.html',locals()) 传递函数名会自动加括号调用 但是模版语法不支持给函数传额外的参数:{{ func }}#你的另一半在等你 传类名的时候也会自动加括号调用(实例化){{ MyClass }}#到底会不会? ''' 内部能够自动判断出当前的变量名是否可以加括号调用 如果可以就会自动执行 针对的是函数名和类名 ''' <p>{{ obj }}</p>#到底会不会? <p>{{ obj.get_self }}</p>#self <p>{{ obj.get_func }}</p>#func <p>{{ obj.get_class }}</p>#cls # django模版语法的取值 是固定的格式 只能采用“句点符” . <p>{{ d.username }}</p>#jason <p>{{ l.0 }}</p>#小红 <p>{{ d.hobby.3.info }}</p>#NB # 即可以点键也可以点索引 还可以两者混用
过滤器(过滤器只能最多有两个参数)
# 过滤器就类似于是模版语法内置的 内置方法 # django内置有60多个过滤器 我们不需要学这么多 了解10个左右就差不多了 后面碰到了再去记忆 # 基本语法 {{数据|过滤器:参数}} # 转义 # 前端 <p>转义:{{ hhh|safe }}</p> # 后端 from django.utils.safestring import mark_safe res = mark_safe('<h1>新新</h1>') """ 以后你在全栈项目的时候 前端代码不一定非要在前端页面书写 也可以现在先在后端写好 然后传递给前端页面 """ file_size = 123123112 import datetime current_time = datetime.datetime.now() info = '本 文 始 发 于个 人公 众 号:Tec hFlo w,原创不易,求所有Med' egl = 'my name is jason my age is 18 and i am from China' msg = 'I Love You And You?' hhh = '<h1>敏敏</h1>' 统计长度:{{ s|length }} # 统计长度:5 默认值(第一个参数布尔值是True就展示第一个参数的值否在展示冒号后面的值):{{ b|default:'啥也不是' }} 文件大小:{{ file_size|filesizeformat }}#文件大小:117.4 MB 日期格式化:{{ current_time|date:'Y-m-d H:i:s' }} #日期格式化:2020-05-28 17:08:17 切片操作(支持步长):{{ l|slice:'0:4:2' }} #切片操作(支持步长):['小红', '花花'] 切取字符(包含三个点):{{ info|truncatechars:9 }} #切取字符(包含三个点):本 文 始 ... 切取单词(不包含三个点 按照空格切):{{ egl|truncatewords:9 }} #切取单词(不包含三个点 按照空格切):my name is jason my age is 18 and ... 切取单词(不包含三个点 按照空格切):{{ info|truncatewords:9 }} #切取单词(不包含三个点 按照空格切):本 文 始 发 于个 人公 众 号:Tec hFlo ... 移除特定的字符:{{ msg|cut:' ' }} #移除特定的字符:ILoveYouAndYou? 拼接操作:{{ l|join:'$' }} #拼接操作:小红$姗姗$花花$茹茹$敏敏$新新 拼接操作(加法):{{ n|add:10 }} #拼接操作(加法):133 #数字类型直接相加 拼接操作(加法):{{ s|add:msg }} #拼接操作(加法):我也想奔现I Love You And You? #非数字类型,拼接
模板语法之标签
# for循环 {% for foo in l %} <p>{{ forloop }}</p> <p>{{ foo }}</p> 一个个元素 {% endfor %} forloop ->自带的属性 其中counter0 类似索引从0 开始 counter 是从1开始 revcounter和revcounter0 为倒序 first和last 是否是第一项和是否是最后一项 {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 6, 'revcounter0': 5, 'first': True, 'last': False} # if判断 {% if b %} <p>baby</p> {% elif s%} <p>都来把</p> {% else %} <p>老baby</p> {% endif %} # for与if混合使用 {% for foo in lll %} {% if forloop.first %} <p>这是我的第一次</p> {% elif forloop.last %} <p>这是最后一次啊</p> {% else %} <p>{{ foo }}</p> {% endif %} {% empty %} <p>for循环的可迭代对象内部没有元素 根本没法循环</p> {% endfor %} # 处理字典其他方法 {% for foo in d.keys %} <p>{{ foo }}</p> {% endfor %} {% for foo in d.values %} <p>{{ foo }}</p> {% endfor %} {% for foo in d.items %} <p>{{ foo }}</p> {% endfor %} # with起别名 {% with d.hobby.3.info as nb %} <p>{{ nb }}</p> 在with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式 <p>{{ d.hobby.3.info }}</p> {% endwith %}
模版的继承
""" 你们有没有见过一些网站 这些网站页面整体都大差不差 只是某一些局部在做变化 """ # 模版的继承 你自己先选好一个你要想继承的模版页面 {% extends 'home.html' %} # 继承了之后子页面跟模版页面长的是一模一样的 你需要在模版页面上提前划定可以被修改的区域 {% block content %} 模版内容 {% endblock %} # 子页面就可以声明想要修改哪块划定了的区域 {% block content %} 子页面内容 {% endblock %} # 一般情况下模版页面上应该至少有三块可以被修改的区域 1.css区域 2.html区域 3.js区域 {% block css %} {% endblock %} {% block content %} {% endblock %} {% block js %} {% endblock %} # 每一个子页面就都可以有自己独有的css代码 html代码 js代码 """ 一般情况下 模版的页面上划定的区域越多 那么该模版的扩展性就越高 但是如果太多 那还不如自己直接写 """
模版的导入
""" 将页面的某一个局部当成模块的形式 哪个地方需要就可以直接导入使用即可 """ {% include 'wasai.html' %}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix