Django开发(五)---模板语言过滤器

过滤器描述
{{ user.name | upper }}
upper以大写方式输出 
add给value加上一个数值
{{ user.age | add:”5” }}

 

addslashes单引号加上转义号 
capfirst第一个字母大写
{{ ‘good’| capfirst }} 返回”Good”

 

center输出指定长度的字符串,把变量居中
{{ “abcd”| center:”50” }}

 

cut删除指定字符串
{{ “You are not a Englishman” | cut:”not” }}

 

date格式化日期 
default如果值不存在,则使用默认值代替
{{ value | default:”(N/A)” }}

 

default_if_none如果值为None, 则使用默认值代替 
dictsort按某字段排序,变量必须是一个dictionary
{% for moment in moments | dictsort:”id” %}

 

dictsortreversed按某字段倒序排序,变量必须是dictionary 
divisibleby判断是否可以被数字整除

 

{{ 224 | divisibleby:2 }}  返回 True
escape按HTML转义,比如将”<”转换为”&lt” 
filesizeformat增加数字的可读性,转换结果为13KB,89MB,3Bytes等
{{ 1024 | filesizeformat }} 返回 1.0KB
{{ ‘hello’| length_is:’3’ }}

 

first返回列表的第1个元素,变量必须是一个列表 
floatformat转换为指定精度的小数,默认保留1位小数
{{ 3.1415926 | floatformat:3 }} 返回 3.142  四舍五入

 

get_digit从个位数开始截取指定位置的数字
{{ 123456 | get_digit:’1’}}

 

join用指定分隔符连接列表
{{ [‘abc’,’45’] | join:’*’ }} 返回 abc*45

 

length返回列表中元素的个数或字符串长度 
length_is检查列表,字符串长度是否符合指定的值 
linebreaks用<p>或<br>标签包裹变量
{{ “Hi\n\nDavid”|linebreaks }} 返回<p>Hi</p><p>David</p>

 

linebreaksbr用<br/>标签代替换行符 
linenumbers为变量中的每一行加上行号 
ljust输出指定长度的字符串,变量左对齐
{{‘ab’|ljust:5}}返回 ‘ab   ’

 

lower字符串变小写 
make_list将字符串转换为列表 
pluralize根据数字确定是否输出英文复数符号 
random返回列表的随机一项 
removetags删除字符串中指定的HTML标记
{{value | removetags: “h1 h2”}}

 

rjust输出指定长度的字符串,变量右对齐 
slice切片操作, 返回列表
{{[3,9,1] | slice:’:2’}} 返回 [3,9]

 

slugify在字符串中留下减号和下划线,其它符号删除,空格用减号替换
{{ '5-2=3and5 2=3' | slugify }} 返回 5-23and5-23
stringformat字符串格式化,语法同python 
time返回日期的时间部分 
timesince以“到现在为止过了多长时间”显示时间变量结果可能为 45days, 3 hours
timeuntil以“从现在开始到时间变量”还有多长时间显示时间变量 
title每个单词首字母大写 
truncatewords将字符串转换为省略表达方式
{{ 'This is a pen' | truncatewords:2 }}返回
This is ...
truncatewords_html同上,但保留其中的HTML标签
{{ '<p>This is a pen</p>' | truncatewords:2 }}返回
<p>This is ...</p>
urlencode将字符串中的特殊字符转换为url兼容表达方式
{{ ‘http://www.aaa.com/foo?a=b&b=c’ | urlencode}}

 

urlize将变量字符串中的url由纯文本变为链接 
wordcount返回变量字符串中的单词数 
yesno将布尔变量转换为字符串yes, no 或maybe
{{ True | yesno }}
{{ False | yesno }}
{{ None | yesno }} 
返回 
yes
no 
maybe
safe告诉浏览器字符串是安全的,用于渲染页面,正常使用tag
a = "<a href=''>点击</a>"
<h1>{{ a|safe }}</h1>

使用safe才能将a正常添加到h1

 模板语言也有属于自己的语法

 

# 业务请求处理做的页面渲染
return render("request", "template.html", {"k1": "v1", "k2": [11, 22, 33], "k3": {"nid": 12, "name": "aaa"})

# html页面模板语法
{{ k1 }}
{{ k2.0 }}  #  取列表中的第一个值,通过.获取
{{ k3.name }}  # 取字典中对应key的值

# for循环
{% for item in k2 %}
    <p>
        {{ item }},
        {{ forloop.counter }},   # 索引,从1开始,类似于python中的enumerate,
        {{ forloop.counter0 }},   # 索引,从0开始,类似于python中的enumerate,
        {{ forloop.first }},        # 判断当前item是否是第一个元素,成立为True,不成立为False
        {{ forloop.last }},         # 判断当前item是否是最后一个元素,成立为True,不成立为False
        {{ forloop.revcounter }}    # 倒序索引,与forloop.counter 相反
    </p>
    {%empty%}
上面for是空的话就执行
    {%empty%}
{% endfor %}

# if条件判断
{% if k1 == "v1" %}
    <h1>V1</h1>
{% elif k2 == "v2" %}
    <h1>V2</h1>
{% else %}
    <h1>666</h1>
{% endif %}


{%csrf_token%}

添加后相当于注销了'django.middleware.csrf.CsrfViewMiddleware'

Django 提供的 CSRF 防护机制

django 第一次响应来自某个客户端的请求时,会在服务器端随机生成一个 token,把这个 token 放在 cookie 里。然后每次 POST 请求都会带上这个 token,这样就能避免被 CSRF 攻击。

  1. 在返回的 HTTP 响应的 cookie 里,django 会为你添加一个 csrftoken 字段,其值为一个自动生成的 token
  2. 在所有的 POST 表单时,必须包含一个 csrfmiddlewaretoken 字段 (只需要在模板里加一个 tag, django 就会自动帮你生成,见下面)
  3. 在处理 POST 请求之前,django 会验证这个请求的 cookie 里的 csrftoken 字段的值和提交的表单里的 csrfmiddlewaretoken 字段的值是否一样。如果一样,则表明这是一个合法的请求,否则,这个请求可能是来自于别人的 csrf 攻击,返回 403 Forbidden.
  4. 在所有 ajax POST 请求里,添加一个 X-CSRFTOKEN header,其值为 cookie 里的 csrftoken 的值

Django 里如何使用 CSRF 防护

  • 首先,最基本的原则是:GET 请求不要用有副作用。也就是说任何处理 GET 请求的代码对资源的访问都一定要是“只读“的。
  • 要启用 django.middleware.csrf.CsrfViewMiddleware 这个中间件
  • 再次,在所有的 POST 表单元素时,需要加上一个 {% csrf_token %} tag
  • 在渲染模块时,使用 RequestContext。RequestContext 会处理 csrf_token 这个 tag,  从而自动为表单添加一个名为 csrfmiddlewaretoken 的 input

{%url %}:

引用路由配置地址

{%with%}:

用更简单的变量名代替复杂的变量名

{%with total=ssshshshshshshsh%}

{{total}}
{%endwith%}

{%verbatim%}:

禁止render渲染,使包裹的内容保持原状

{%load%}:

加载标签库

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值