Django之Template(二)模板语法

上一篇:https://blog.csdn.net/qq_36110736/article/details/84585159

常用语法

标签

  1. 变量相关
  2. 静态文件
  3. 逻辑

过滤器

  1. 时间日期
  2. 字符串相关
  3. 数字
  4. 其他

注释

  1. 单行注释
  2. 多行注释

 

变量/静态文件

变量

  1. 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
  2. 当模版引擎遇到点("."),会按照下列顺序查询:
      
      字典查询
      属性或方法查询
      数字索引查询
     
  3. 如果变量不存在, 模版系统将插入'' (空字符串)
     

静态文件

加载静态文件如 css 、js、img 等

  1. 首先指定settings.py文件中的 属性
    STATIC_URL = '/static/'
  2. 然后根据属性创建目录
  3. 最后在模板文件中添加如下代码
    {% load static %}
    <img src="{% static 'image/yan.jpg' %}" width="200" height="130"><br>

     

  4. 注意:如果某个文件多次加载可以把它作为一个变量保存

    {% 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 %}

参数:

  1. forloop.counter     当前循环的索引值(从1开始)
  2. forloop.counter0     当前循环的索引值(从0开始)
  3. forloop.revcounter     当前循环的倒序索引值(从1开始)
  4. forloop.revcounter0     当前循环的倒序索引值(从0开始)
  5. forloop.first     当前循环是不是第一次循环(布尔值)
  6. forloop.last     当前循环是不是最后一次循环(布尔值)
  7. 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

时间日期

  1. date格式化日期字符串
  2. time格式化时间
  3. timesince格式化时间

 

字符串

  1. addslashes给变量中的引号(双引号、单引号)前加上斜线
  2. capfirst首字母大写
  3. cut从字符串中移除指定的字符
  4.  length  求字符串或者列表的长度
  5. length_is  比较字符串或者列表的长
  6. urlencode 对URL进行编码处理
  7. upper\lower 大写\小写
  8. slice  切片操作

数字

  1. add给变量加上相应的值
  2. floatformat格式化浮点数

其他过滤器

  1. default如果值是False,就替换成设置的默认值,否则就使用本来的值(空字符串”“、空列表[]、空字典{}、空元组()、None在python里也是False)
  2. default_if_none如果只是None,就替换成设置的默认值,否则就使用本来的值
  3. dictsort按照设定的参数(key)对应的value对列表进行排序
  4. dictsorted和上面恰好相反
  5. divisbleby是否能够被某个数字整除,是的话返回True,否则返回False
  6. escape对字符串进行转义。django默认自动转义,如果我们关闭了自动转义,这可使用escape过滤器来转义。
  7. escapejs替换value中的某些字符,以适应JAVASCRIPT和JSON格式
  8. filesizeformat格式化文件大小显示
  9. first返回列表中的第一个值
  10. last返回列表中的最后一个值

注释

{# #}单行注释,{% comment %}多行注释

其他标签

  1. {% csrf_token %}  生成csrf_token的标签,用于防止跨站攻击验证
  2. {% debug %}   调用调试信息
  3. {% load %} 加载标签库
  4. {% now %} 获取当前的时间
  5. {% spaceless %} 移除空格
  6. {% url %} 引入路由配置的地址
  7. {% verbatim %}  禁止render
  8. {% with %} 用更简单的变量名缓存复制的变量名
     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值