过滤器

  • 过滤器作用:模板语言中不允许带参数的函数,如果要对变量进行处理,就需要使用过滤器
  • 使用管道符号 | 来应用过滤器,用于进行计算、转换操作,可以使用在变量、标签中
  • 过滤器语法:

      一个参数时:变量|过滤器
      两个参数时:变量|过滤器:参数
    
  • 过滤器语法说明:

    • 第一个参数就是变量
    • 如果过滤器需要追加参数,则使用冒号 : 传递参数
    • 冒号后面最多可以传一个参数

常用过滤器

  • length,返回字符串、列表、元组、字典的元素个数
    • 变量|length
  • default,如果变量不存在时则返回默认值
    • 变量|default:默认值
  • date,用于对日期类型的值进行字符串格式化

    • 常用的格式化如下
      • Y表示年,格式为4位,y表示两位的年
      • m表示月,格式为01,02,12等
      • j表示日,格式为1,2等
      • H表示时,24进制,h表示12进制的时
      • i表示分,为0-59
      • s表示秒,为0-59
    • 日期|date:'Y年m月j日 H时i分s秒'
  • 点击查看更多内建过滤器

过滤器演练

  • 需求

以下为需求实现步骤

  • 正则匹配urls

      # 过滤器
      url(r'^fillter/$', views.fillter),
    
  • 视图

      # 过滤器
      def fillter(request):
          # 获取数据库书籍列表信息
          bookInfos = BookInfo.objects.all()
          # 构造上下文
          context = {'booklist': bookInfos}
          return render(request, 'Book/fillter.html', context)
    
  • 模板
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器</title>
</head>
<body>

<ul>
    {% for book in booklist %}
        {% if book.name|length > 4 %}
            <li style="background: red">{{ book.name }}--{{ book.pub_date|date:'Y年m月j日' }}</li>
        {% else %}
            <li style="background: green">{{ book.name }}--{{ book.pub_date }}</li>
        {% endif %}
    {% endfor %}
</ul>

</body>
</html>
  • 本地化:用于修改日期显示格式

      LANGUAGE_CODE = 'zh-Hans' #'en-us'
    
      TIME_ZONE = 'Asia/Shanghai' #'UTC'