django 模板系统 有很多标签,其中cycle我觉得不好理解,至少网上文档也不好理解。

这些标签可以通过渲染模板文件而获得我们预期的效果和文字,常用的有如下这些标签:

标签:{% 标签名 %}
{% if 变量 %}  支持not or and,空对象空的玩意0默认为False
{% else %}
{% endif %}

{% for x in 变量名 %}      for 的forloop变量,有如下:counter,counter0,revcounter,revcounter0,first,last,parentloop
{% empty %}
{% endfor %}

{% ifequal 变量一 变量二 %}
{% else %}
{% endifequal %}

python的字典,列表,布尔,不能作为模板的比较量
{% ifnotequal %}
{% else %}
{% endifnotequal %}

过滤器:
用管道符,first(取得第一个字符),lower,upper,truncatewords(显示变量的前三十个词)
    addslashes(添加反斜杠到,任何反斜杠,单引和双引号),length(长度,个数)
    data(格式化datatime对象,例子:{{ pub_data|data:"F j,Y" }})
    过滤器,看附录F
有参数的话直接冒号接参数,如:“参数”

{% block %}
{% endblock %}

{% comment %}
{% endcomment %}

{% crsf_taken %}
防止crsf攻击

{% autoescape off%}{% endautoescape %}关闭自动转义,django默认会对传入模板的特殊符号进行转义,为了安全起见

而比较特别的有一个就是cycle标签,什么功能呢

例子:

cycle会循环它后面的每一个出现的东东,先看例子

{% for foo in list %}
{% cycle 'row1' 'row2' %}
{% endfor %}

每一次循环会循环取得‘row1’和‘row2’这两个。cycle这五个字好像有魔力,每一次循环可以得到一个row,然后会记录,下一次看到cycle就会取得下一个row。

上面是放在html模板文件里,所以我的结果是:

‘row1’ ‘row2’ ‘row3’

在我的视图函数里面,我给list循环三次

有时候我们可以给一个循环去一个名字如下代码

我是定义1:{% cycle 'row1' 'row2' as cbc %}
我是定义2:{% cycle 'row3' 'row3' as aaa%}

页面是会有:我是定义1:row1 我是定义2:row3

去了名字的cycle就可以用变量来取得,就像:{{ cbc }}{{ aaa }}

这个变量就是取得相应循环次数所得的cycle值,

我是定义1:row1 我是定义2:row:3 变量1:row1 变量2:row:3 我是定义1:row2 我是定义2:row4 变量1:row2 变量2:row4 我是定义1:row1 我是定义2:row:3 变量1:row1 变量2:row:3

结果很烦,这时候我们就会考虑,定义的标签可以不每次都说出自己是谁吗,它就不能保持沉默?可以

{% for foo in list %}
我是定义1:{% cycle 'row1' 'row2' as cbc silent%}
我是定义2:{% cycle 'row:3' 'row4' as aaa silent%}
变量1:{{ cbc }}
变量2:{{ aaa }}
{% endfor %}

在最后加入silent,告诉它沉默,就不会说话了,这样就只有变量会说话了,以后。

我是定义1: 我是定义2: 变量1:row1 变量2:row:3 我是定义1: 我是定义2: 变量1:row2 变量2:row4 我是定义1: 我是定义2: 变量1:row1 变量2:row:3

定义后的都没了。

当然,还有一个点,我把for循环去了先

我是定义1:{% cycle 'row1' 'row2' as cbc %}
变量1:{{ cbc }}

没有循环了,但是我们可以告诉模板说,给我循环。像这样

我是定义1:{% cycle 'row1' 'row2' as cbc %}
变量1:{{ cbc }}
给我循环:{% cycle cbc %}
给我循环:{% cycle cbc %}
给我循环:{% cycle cbc %}
</body>

然后他就会乖乖的不断取得下一个值,如果你在cbc名字后面,加入了silent,那么后面的cycle都会保持沉默,除了变量形式的。

最新文章

  1. fragment的切换(解决REPLACE的低效)
  2. 使用fiddler手机抓包
  3. 浏览器对象模型(BOM,Browser Object Model)
  4. BZOJ 3505: [Cqoi2014]数三角形 数学
  5. 再次阅读《精通CSS-高级Web标准解决方案(第二版)》
  6. jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
  7. DHCPv6
  8. [UOJ UR#16]破坏发射台
  9. 禁用ViewPager的滑动事件
  10. 模拟登录,发送amf类型数据
  11. 吴恩达课后作业学习2-week2-优化算法
  12. Github与SmartGit使用说明与建议
  13. HDU 1166 - 敌兵布阵 - [单点修改、区间查询zkw线段树]
  14. Apache TraceEnable关闭与测试方法
  15. 我在华为,软件测试人员在工作中如何运用Linux?
  16. java反射调用api
  17. Spring Security学习笔记(三)
  18. JavaScript 中对小数取整的常用函数
  19. linux下apache+php搭建配置记录
  20. [原创]java在线比较两个word文件

热门文章

  1. jQuery习题的一些总结
  2. Spring 中的 Bean 配置
  3. C#写好的类库dll怎么在别人调用的时候也能看到注释?
  4. 夺命雷公狗---Thinkphp----9之中间层的创建,防止跨目录访问
  5. 夺命雷公狗---DEDECMS----7dedecms目录结构
  6. 个人的java web开发书单
  7. [转]Delphi多线程编程入门(二)——通过调用API实现多线程
  8. android 项目学习随笔二十(屏幕适配)
  9. linux配置java环境变量(详细)【转】
  10. Pascal&#39;s Triangle