django 模板

一 常用

1. {{ 不存在 | default : "xx" }}
2. {{ name | length }}
3. {{ xx | slice "1:-1" }}
4. {{ now | date: "Y-m-d H:i:s" }} now = datetime.now()
5. {{ xx | truncatechars : x }}      截取文字
6. {{ xx | truncatewords : x }}      截取单词
7. {% for k,v in d.item %}
           {{ k }} {{ v }}
     {% endfor %}
8. {% for person in person_list %}
     {{ person.name }}
 { % empty %}
   {{ xxx }}
   {% endfor %}
9. 

{% for name in name_list %}<li class="{% if forloop.first %} 'sb' {% endif %}">
        {{ forloop.revcounter }} - {{ name }}</li>
{% endfor %}

forloop.counter             当前索引值默认从1开始
forloop.counter 0           从1开始
forloop.revcounter           倒序索引值默认以1结束
forloop.revcounter 0      以0结束
forloop.firs          是不是第一次循环
forloop.last

10. {{ a-html | safe }} 

11. {{ obj | capfirst }}     首字母大写

插入:

cycle

每执行这个标签一次输出参数中的一个值。第一次执行输出第一个参数,第二次执行输出第二个参数,以此 类推。所有参数都输出一遍之后,回到第一个参数,再依次输出。这个标签在循环中特别有用:

{% for o in some_list %}

<tr class="{% cycle 'row1' 'row2' %}">
 ... 
</tr> 
{% endfor %}

 

firstof:

输出参数中第一个不为 False 的变量值。如果传入的变量都为 False,不输出任何内容。用法示例

{% firstof var1 var2 var3 %}

等效于

{% if var1 %}

{{ var1 }}

{% elif var2 %}

{{ var2 }}

{% elif var3 %}

{{ var3 }}

{% endif %}

 

for :

可以使用 {% for obj in list reversed %} 反向迭代列表。如果需要迭代列表构成的列表,可以把各个子列 表拆包出来,赋予单独的变量。访问字典中的元素时也可以这么做。假如上下文中有个名为 data 的字典

{% for key, value in data.items %}

{{ key }}: {{ value }}

{% endfor %}

 

ifchanged:

检查前一次迭代之后值是否变了。{% ifchanged %} 块标签在循环中使用。有两种用法:
1. 检查渲染得到的内容,与之前的状态比较,只在有变化时显示内容。 2. 检查指定的一个或多个变量的值是否有变化。


spaceless :

删除 HTML 标签之间的空白,包括制表符和换行符。用法示例:
{% spaceless %}

<p>
<a href="foo/">Foo</a>
</p>

{% endspaceless %}

 

这个示例返回的 HTML 如下:
<p><a href="foo/">Foo</a></p>
 

 

 with:

把复杂的变量缓存到一个简单的名称下。多次访问耗资源的(如访问数据库)方法时可以这么做。例如:
{% with total=business.employees.count %}

{{ total }} employee{{ total|pluralize }}

{% endwith %}

 

addslashes:

在引号前加上斜线。可用于转义 CSV 中的字符串。例如:
{{ value|addslashes }}
如果 value 为 "I'm using Django",输出 "I\'m using Django"。
 

center:

在指定宽度中居中显示值。例如:
"{{ value|center:"14" }}"
如果 value 为 "Django",输出 "␣␣␣␣Django␣␣␣␣"(␣ 表示一个空格)。
 

 

default_if_none:

当且仅当 value 为 None 时使用指定的默认值,否则使用 value 的值。
 

 

dictsort:

按参数指定的键排序字典构成的列表,返回排序后的列表。例如:
{{ value|dictsort:"name" }}
 

 

divisibleby:

如果值能被参数整除,返回 True。例如:
{{ value|divisibleby:"3" }}
如果 value 为 21,返回 True。

 

floatformat:

不指定参数时,近似浮点数,只保留一位小数(前提是有小数)。如果指定了整数参数,floatformat 近似时 保留相应位数的小数。
如果 value 为 34.23234,{{ value|floatformat:3 }} 输出 34.232。
 

length_is:

如果值的长度与参数相等,返回 True,否则返回 False。例如:
{{ value|length_is:"4" }}
 


ljust:

在指定宽度中左对齐值。例如:
{{ value|ljust:"10" }}
如果 value 为 "Django",输出 "Django␣␣␣␣"(␣ 表示一个空格)。

 

truncatechars_html :

与 truncatechars 类似,不过知道如何截断 HTML 标签。
 

urlize :

把文本中的 URL 和电子邮件地址转换成可点击的链接。支持以 http://、https:// 或 www. 开头的 URL。

 

urlizetrunc:

与 urlize 一样,把 URL 和电子邮件地址转换成可点击的链接,但是在指定的字符长度处截断 URL。例如:
{{ value|urlizetrunc:15 }}
如果 value 为 "Check out www.djangoproject.com",输出 "Check out <a href="http://www.djangoproject.com" rel="nofollow">www.djangopr…</a>"。与 urlize 一样,这个过滤器只应该应用于纯文本。
 

 

 yesno:

把 True、False 和 None(可选)映射到字符串“yes”、“no”、“maybe”上,或者是通过参数传入的列表上(以 逗号分隔),根据真假值情况,返回相应的字符串。例如:
{{ value|yesno:"yeah,no,maybe" }}

 

二 自定义(要重启才能生效)

在app下建templatetags python package,再新建个py文件

mytags.py

from django import template
register = template.Library()   # 注册


# 自定义filter
@register.filter(name="aki")
def multi(x, y):
    return x*y
# 模板用法是 {{ num | aki:2}}   num已经被指定为12, x是管道符前面的参数,y是后面的参数如 2  最多两个参数
# 注意上面的aki:2 :2 不能有空格,否则报参数个数的错误


# 自定义simple_tag
@register.simple_tag(name="desky")
def my_input(x, y, z):
    return x*y*z
# 模板用法是 {% desky "x" "xo" "xoo"%}    可以定义多个参数


# 自定义inclusion_tag
@register.inclusion_tag('test.html')
def show_result(n):
    n = 1 if n < 1 else int(n)
    data = ["第{}项".format(i) for i in range(1, n+1)]
    return {"data": data}


text.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
{% load mytags %}
{% show_result 5 %}
{% desky 2 5 6%}
{{ num | aki:23 }}
{##}
</body>
</html>

test.html

<ul>
    {% for choice in data %}
        <li>{{ choice }}</li>
    {% endfor %}
</ul>
几点说明
filter: 最多两个两个参数,可以进行逻辑判断,{% if i|multi > 1000 %} .....,还有千万注意{ num | aki:2}}不能有空格 引用是 {{}}

simple_tag : 可以传多个参数,但不能进行逻辑判断,% desky "x" "xo" "xoo"%} 引用时 {%%}
inclusion_tag('xx.html'): 是将一段html 插入到哪里,这里是将test插入到text中,{% show_result 5 %} 要引用,还要将参数传递进去

最后说的是,新建的python package 必须叫templatetags, 别忘引入{% load mytags %}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值