过滤器格式{{   }}

标签格式{%  %}

模板中过滤器filter只能使用一个参数,自定义标签中则可以使用多个参数!!!

过滤器能够采用链式的方式使用,例如:{{ text | escape | linebreaks }}

过滤器的参数中如果带有空格,那么需要用引号引起来,例如:{{ list | join : ", "}}

标签参数不限,但不能放在if for语句中,就是当前if for那句代码里,在if for 其他地方可以使用!而过滤器可以用在if 和for语句中

for
{% for %}标签允许你按顺序遍历一个序列中的各个元素
Python的for语句语法为for X in Y,X是用来遍历Y的变量
每次循环模板系统都会渲染{% for %}和{% endfor %}之间的所有内容
例如,显示给定athlete_list变量来显示athlete列表:

  1. <ul>
  2. {% for athlete in athlete_list %}
  3. <li>{{ athlete.name }}</li>
  4. {% endfor %}
  5. </ul>

在标签里添加reversed来反序循环列表:

  1. {% for athlete in athlete_list reversed %}
  2. ...
  3. {% endfor %}
  4. {% for %}标签可以嵌套:
  5. {% for country in countries %}
  6. <h1>{{ country.name }}</h1>
  7. <ul>
  8. {% for city in country.city_list %}
  9. <li>{{ city }}</li>
  10. {% endfor %}
  11. </ul>
  12. {% endfor %}

系统不支持中断循环,如果你想这样,你可以改变你想遍历的变量来使得变量只包含你想遍历的值
类似的,系统也不支持continue语句,本章后面的“哲学和限制”会解释设计的原则
{% for %}标签内置了一个forloop模板变量,这个变量含有一些属性可以提供给你一些关于循环的信息
1,forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1,例如:

  1. {% for item in todo_list %}
  2. <p>{{ forloop.counter }}: {{ item }}</p>
  3. {% endfor %}

2,forloop.counter0类似于forloop.counter,但它是从0开始计数,第一次循环设为0
3,forloop.revcounter表示循环中剩下的items数量,第一次循环时设为items总数,最后一次设为1
4,forloop.revcounter0类似于forloop.revcounter,但它是表示的数量少一个,即最后一次循环时设为0
5,forloop.first当第一次循环时值为True,在特别情况下很有用:

  1. {% for object in objects %}
  2. {% if forloop.first %}<li class="first">{% else %}<li>{% endif %}
  3. {{ object }}
  4. </li>
  5. {% endfor %}

6,forloop.last当最后一次循环时值为True

  1. {% for link in links %}{{ link }}{% if not forloop.last %} | {% endif %}{% endfor %}

7,forloop.parentloop在嵌套循环中表示父循环的forloop:

  1. {% for country in countries %}
  2. <table>
  3. {% for city in country.city_list %}
  4. <tr>
  5. <td>Country #{{ forloop.parentloop.counter }} </td>
  6. <td>City #{{ forloop.counter }}</td>
  7. <td>{{ city }}</td>
  8. </tr>
  9. {% endfor %}
  10. </table>
  11. {% endfor %}

富有魔力的forloop变量只能在循环中得到,当模板解析器到达{% endfor %}时forloop就消失了
如果你的模板context已经包含一个叫forloop的变量,Django会用{% for %}标签替代它
Django会在for标签的块中覆盖你定义的forloop变量的值
在其他非循环的地方,你的forloop变量仍然可用
我们建议模板变量不要使用forloop,如果你需要这样做来访问你自定义的forloop,你可以使用forloop.parentloop

一些实用但较少见的内建标签

comment

注释,{% comment %} 和 {% endcomment %}之间的内容被解释为注释

firstof

返回列表中第一个可用(非False)的变量或者字符串,注意的是firstof中的变量非自动转义

{% firstof var1 var2 var3 "fallback value" %}

for

for循环,可以在后面加入reversed参数遍历逆序的列表

{% for obj in list reversed %}

for...empty

如果for循环的参数-列表为空,将执行empty里面的内容

<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athlete in this list!</li>
{% endfor %}
<ul>

default_if_none
             使用形式:{{ value | default_if_none:"nothing" }},例如,如果value是None,那么输出将是nothing
             意义:如果value是None,那么输出将使用缺省值

length
使用形式:{{ value | length }}
意义:返回value的长度。

wordcount
返回字符串中单词的数目

自定义标签和自定义过滤器

在app目录下建一个子目录,目录名称必须为templatetags,然后在该目录下新建一个.py文件(如Mytag.py),在该文件具体自定义标签和过滤器

#!/usr/bin/env python  
# _*_ coding:utf-8 _*_
# @File : blog/BlogAPP/templatetags/Mytag.py
from django import template
register = template.Library()

# 自定义一个有关时间转化的过滤器
@register.filter
def beijingtime(t):
"""
参数 t 的类型为datetime.datetime,形式如2017-09-11 23:12:34.634145 <class 'datetime.datetime'>
"""
from datetime import datetime
return datetime.fromtimestamp(t.timestamp()).strftime("%Y-%m-%d %H:%M") # 自定义一个css路径的标签
@register.simple_tag
def rbac_css():
    file_path = os.path.join('ql','theme','rbac.css')
if os.path.exists(file_path):
return mark_safe(open(file_path,'r',encoding='utf8').read())
else:
raise Exception("rbac主题未找到")

用法如下在模板html中
{% load Mytag %}
<style>
{% rbac_css %}
</style>
<span>{{ comment_item.creat_time|beijingtime }}</span>
 

Django标签和过滤器的更多相关文章

  1. django中自定义标签和过滤器

    想要实现自定义标签和过滤器需要进行准备工作: 准备(必需)工作: 1  在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为polls的app下创建了一个tem ...

  2. django 自定义标签和过滤器

    django 自定义标签和过滤器 Django支持自定义标签和过滤器.起初还不太重视它这项功能,但最近试了试自定义标签.发现django这个功能实在是太爽了. 首先在你项目的一个app中建立一个pyt ...

  3. django 内建标签和过滤器参考

    下面的标签和过滤器参考就是为那些没有 admin 站点的可用的人准备的.由于 Django 是高度可定制的,你的 admin 里的关于标签和过滤器的参考可以认为是最可信的. 内建标签参考 block ...

  4. Django 自定义模版标签和过滤器

    实现自定义过滤器 1. 创建register变量 在你的模块文件中,你必须首先创建一个全局register变量,它是用来注册你自定义标签和过滤器的, 你需要在你的python文件的开始处,插入几下代码 ...

  5. django “如何”系列4:如何编写自定义模板标签和过滤器

    django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...

  6. Django自定义模板标签和过滤器

    1.创建模板库 在某个APP所在目录下新建包templatetags,然后在其中创建存储标签或者过滤器的的模块,名称随意,例如myfilters.py. 在这个模块中编写相关代码. 注意:templa ...

  7. python 全栈开发,Day70(模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介)

    昨日内容回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...

  8. Django 模板 语法 变量 过滤器 模板继承 组件 自定义标签和过滤器 静态文件相关

    本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法   模板渲染的官方文档 关于模板渲染你只需要记两种特殊符号(语法 ...

  9. django特殊的标签和过滤器

    国际化标签和过滤器 Django还提供了一些模板标签和过滤器,用以控制模板中国际化的每个方面.它们允许对翻译,格式化和时区转换进行粒度控制. 1. i18n 此标签允许在模板中指定可翻译文本.要启用它 ...

随机推荐

  1. MySql如何查询JSON字段值的指定key的数据

    实例:SELECT param->'$.pay' as pay_type FROM game.roominfo; 其中:param是roominfo表的一个字段,当中存的是JSON字符串,pay ...

  2. Kotlin入门学习笔记

    前言 本文适合人群 有一定的java基础 变量与方法 变量声明及赋值 var 变量名: 变量类型 val 变量名: 变量类型 这里,var表示可以改变的变量,val则是不可改变的变量(第一个赋值之后, ...

  3. HTTPS 站点的性能优化

    HTTPS 站中的几大难题 性能,包括: HTTPS需要多次握手,因此网络耗时变长,用户从HTTP跳转到HTTPS需要一些时间: HTTPS要做RSA校验,这会影响到设备性能: 所有CDN节点要支持H ...

  4. H5页面的高度宽度100%

    解决方案1: 设置如下:html,body{ min-height:100vh; background-color:#fff; }这样高度首先不会写死,而且满足最小高度是满屏 解决方案2: 可以用vh ...

  5. C++玄学预编译优化

    #pragma GCC diagnostic error "-std=c++11" #pragma GCC optimize("-fdelete-null-pointer ...

  6. Webpack4教程:第一部分,入口、输入和ES6模块

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://wanago.io/2018/07/16/webpack-4-course-par ...

  7. 单元测试_JUnit常用单元测试注解介绍及代码演示

    JUnit常用单元测试注解介绍及代码演示   by:授客 QQ:1033553122 1. 测试环境 1 2. 基础概念 1 3. 常用Annotation 1 4. 运行环境配置 3 maven配置 ...

  8. Netty学习笔记(六) 简单的聊天室功能之WebSocket客户端开发实例

    在之前的Netty相关学习笔记中,学习了如何去实现聊天室的服务段,这里我们来实现聊天室的客户端,聊天室的客户端使用的是Html5和WebSocket实现,下面我们继续学习. 创建客户端 接着第五个笔记 ...

  9. 【PAT】B1018 锤子剪刀布

    抄的柳婼小姐姐的,感觉三个数求最大那里用的真棒 #include <stdio.h> int main() { int N; scanf("%d", &N); ...

  10. python+selenium 输出2种样式的测试报告

    第一种: 1.通过 HTMLTestRunner 模块输出报告 2.下载连接 http://tungwaiyip.info/software/HTMLTestRunner.html 3.将下载好的文件 ...