【一】模板语法的传取值
- 模板语法需要记两组符号,分别是
{{}}
和{% %}
{{}}
通常是与变量相关的
{% %}
通常是与逻辑相关的
【1】传值#
- 模板语法可以传递python所有的数据类型,包括函数和类,以及类实例化的对象
- 传递函数的时候,函数需要有返回值,要不然在页面显示的结果就是None
- 模板语法会自动把所有能加括号调用的对象全部加括号调用,通常指代函数和类
- 要注意的是,django模板语法并不支持带形参的函数,如果带了形参,返回的结果永远都是None
【2】取值#
- 在模板语法中,取值是通过句点符的形式取值的
- 可以点索引,也可以点键值,也可以连续连
class Test(View):
def get(self, request):
s = 'green'
num_int = 18
num_float = 18.88
boolean = True
l1 = [1, 2, 3, 4, 5, 6, '列表']
dic = {'name': 'green', 'age': 18, 'hobby': ['洗脚', '搓背']}
tup = (1, 2, 3, '元组')
set_1 = {1, 2, 3, '集合'}
class Obj:
def one(self):
...
def two(self):
return 'two'
def __str__(self):
return '我被输出了'
obj = Obj()
return render(request, 'test.html', locals())
def post(self):
return HttpResponse('Tsst OK')
## html
<p>{{ s }}</p>
<p>{{ num_int }}</p>
<p>{{ num_float }}</p>
<p>{{ l1.6 }}</p>
<p>{{ dic.hobby.1 }}</p>
<p>{{ tup }}</p>
<p>{{ set_1 }}</p>
<p>{{ boolean }}</p>
<p>{{ func }}</p>
<p>{{ obj.one }}</p>
<p>{{ obj.two }}</p>
<p>{{ Obj }}</p>
【二】过滤器
【1】过滤器语法#
- 在模板语法中,过滤器相当于传到页面的值的方法
- 过滤器的语法为 ,最多只能接收两个参数
{{value|filter_name:参数}}
【2】过滤器介绍#
{{ value|length }}
{{ value|default:'啥也不是' }}
{{ value|filesizeformat }}
{{ current_time|date:'Y-m-d H:m:s ' }}
{{ l1|slice:'0:3:2' }}
{{ value|truncatechars:9}}
{{ value|cut:' ' }}
{{ value|join:'NB' }}
{{ value|add:11 }}
{{ value|safe }}
【三】标签
【1】for循环#
<ul>
{% for user in user_list %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>
{% for item in l1 %}
<p>当前循环的所有值(从1开始){{ forloop.counter }}</p>
<p>当前循环的所有值(从0开始){{ forloop.counter0 }}</p>
<p>当前循环的倒序索引值(从1开始){{ forloop.revcounter }}</p>
<p>当前循环的倒序索引值(从0开始){{ forloop.revcounter0 }}</p>
<p>判断当前是否是第一次循环{{ forloop.first }}</p>
<p>判断当前是否是最后一次循环{{ forloop.last }}</p>
<p>本层循环的外层循环{{ forloop.parentloop }}</p>
{% endfor %}
{% for item in items %}
{{ item }}
{% empty %}
<p>No items available.</p>
{% endfor %}
【2】if判断#
- 跟python的if elif else 用法很像
{% if user_list %}
用户人数:{{ user_list|length }}
{% elif black_list %}
黑名单数:{{ black_list|length }}
{% else %}
没有用户
{% endif %}
【3】with语法#
- 用于当一个变量需要多次引用,且表达式很复杂时,可以给该变量取一个别名
{% with business.employees.count as total %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
【4】csrf_token#
- 这个标签用于跨站请求伪造保护。
- 在页面的form表单里面写上
【四】模板的继承
【1】模板#
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
{% block page-css %}
{% endblock %}
</head>
<body>
<h1>这是母板的标题</h1>
{% block page-main %}
{% endblock %}
<h1>母板底部内容</h1>
{% block page-js %}
{% endblock %}
</body>
</html>
【2】继承模板#
{% extends 'father.html' %}
【3】块(block)#
- 在父模板中用
{% block xxx%}
来定义块,声名这一块内容是可以让其他页面修改的
- 子页面通过定义模板中的block名来修改模板对应的内容
{% block page-main %}
<p>我是你爹</p>
<p>你是我儿</p>
<p>儿子你好</p>
{% endblock %}
【4】组件#
- 可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。
{% include 'navbar.html' %}
【五】静态文件加载
【1】#
{% load static %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
{% load static %}
<script src="{% static "mytest.js" %}"></script>
{% load static %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}"></img>
【2】#
- 相当于获取到了 static 文件夹的文件夹绝对路径,从绝对路径再往下找静态文
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!