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
扫描二维码关注公众号,回复: 5525973 查看本文章
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%}:

加载标签库

猜你喜欢

转载自blog.csdn.net/Lzs1998/article/details/88532017