上一篇:https://blog.csdn.net/qq_36110736/article/details/84585159
常用语法
标签
- 变量相关
- 静态文件
- 逻辑
过滤器
- 时间日期
- 字符串相关
- 数字
- 其他
注释
- 单行注释
- 多行注释
变量/静态文件
变量
- 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
- 当模版引擎遇到点("."),会按照下列顺序查询:
字典查询
属性或方法查询
数字索引查询
- 如果变量不存在, 模版系统将插入'' (空字符串)
静态文件
加载静态文件如 css 、js、img 等
- 首先指定settings.py文件中的 属性
STATIC_URL = '/static/'
- 然后根据属性创建目录
- 最后在模板文件中添加如下代码
{% load static %} <img src="{% static 'image/yan.jpg' %}" width="200" height="130"><br>
-
注意:如果某个文件多次加载可以把它作为一个变量保存
{% static 'image/yan.jpg' as yan %} <img src="{{ yan }}"></img>
关于静态文件可以参考 https://www.jb51.net/article/140451.htm
例子:
项目目录:
views.py:
from django.shortcuts import render
from . import models
#将一个字符串 s 和全体用户对象封装,通过render 函数返回前台页面
def show_temp(request):
s = 'hello'
user = models.User.objects.all()
return render(request, 'user.html', {'user': user,
's': s
})
后台网页代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{# 加载静态文件,只需出现一次#}
{% load static %}
</head>
<body>
{# 获取了全部的用户信息,但只显示第一条 #}
<h1>{{ s }}</h1>
{# 加载一张图片 #}
<img src="{% static 'image/yan.jpg' %}" width="200" height="130"><br>
<span>第一个用户对象:{{ user.0 }}</span><br>
<span>当值不存在时:{{ null }}</span><br>
<span>第一个用户对象的用户名:{{ user.0.username }}</span><br>
</body>
</html>
经过浏览器渲染后:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>hello</h1>
<img src="/static/image/yan.jpg" width="200" height="130"><br>
<span>第一个用户对象:User object (1)</span><br>
<span>当值不存在时:</span><br>
<span>第一个用户对象的用户名:first</span><br>
</body>
</html>
最终效果:
逻辑:
循环
形如:
{% for xxx in xxx %}
........
{% empty%}
.........
{% endfor %}
参数:
- forloop.counter 当前循环的索引值(从1开始)
- forloop.counter0 当前循环的索引值(从0开始)
- forloop.revcounter 当前循环的倒序索引值(从1开始)
- forloop.revcounter0 当前循环的倒序索引值(从0开始)
- forloop.first 当前循环是不是第一次循环(布尔值)
- forloop.last 当前循环是不是最后一次循环(布尔值)
- forloop.parentloop 本层循环的外层循环
判断
形如:
{%if ...%}
......
{% elif... %}
......
{% else %}
......
{% endif %}
if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if s == 'hello' %}
<span>你好</span>
{% else %}
<span>hello</span>
{% endif %}
<table border="1">
<tr>
<td>编号</td>
<td>用户名</td>
<td>密码</td>
</tr>
{% for u in user %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ u.username }}</td>
<td>{{ u.password }}</td>
</tr>
{% empty %}
<li>抱歉,没有查询到个人信息</li>
{% endfor %}
</table>
</body>
</html>
此外还有
{% ifequal %}
和{% ifnotequal %}
比较是否相等,只限于简单的类型,比如字符串、整数、小数的比较,列表、字典、元组不支持
{% cycle %}
在循环是轮流使用给定的字符串列表中的值
过滤器
感谢朱兆筠同学 http://www.cnblogs.com/zzy-9318/p/8672945.html
时间日期
字符串
- addslashes给变量中的引号(双引号、单引号)前加上斜线
- capfirst首字母大写
- cut从字符串中移除指定的字符
- length 求字符串或者列表的长度
- length_is 比较字符串或者列表的长
- urlencode 对URL进行编码处理
- upper\lower 大写\小写
- slice 切片操作
数字
- add给变量加上相应的值
- floatformat格式化浮点数
其他过滤器
- default如果值是False,就替换成设置的默认值,否则就使用本来的值(空字符串”“、空列表[]、空字典{}、空元组()、None在python里也是False)
- default_if_none如果只是None,就替换成设置的默认值,否则就使用本来的值
- dictsort按照设定的参数(key)对应的value对列表进行排序
- dictsorted和上面恰好相反
- divisbleby是否能够被某个数字整除,是的话返回True,否则返回False
- escape对字符串进行转义。django默认自动转义,如果我们关闭了自动转义,这可使用escape过滤器来转义。
- escapejs替换value中的某些字符,以适应JAVASCRIPT和JSON格式
- filesizeformat格式化文件大小显示
- first返回列表中的第一个值
- last返回列表中的最后一个值
注释
{# #}
单行注释,{% comment %}
多行注释
其他标签
{% csrf_token %}
生成csrf_token的标签,用于防止跨站攻击验证{% debug %}
调用调试信息{% load %}
加载标签库{% now %}
获取当前的时间{% spaceless %}
移除空格{% url %}
引入路由配置的地址{% verbatim %}
禁止render{% with %}
用更简单的变量名缓存复制的变量名