safe过滤器和{% autoescape %}标签

首先看这样一个例子:

views.py中:

c = '<h3>更上一层楼</h3>'

render(request,'test.html',{'content': c})

然后再html中使用变量{{ content }}

上述例子就涉及到了过滤器safe,如果不加safe标记,html字符串是会被自动转义的(即原样输出);禁止自动转义之后,按html格式输出变量内容。

而如果使用到{% autoescape %}标签:

参数为off,禁止自动转义;

参数为on,开启自动转义。

拓展:参数为off,但是加了escape过滤器,结果是开启自动转义。

block标签

{% block foo %}

这个标签中的内容将会被子模板中的覆盖。

comment标签

此标签中的内容不会被显示,为注释内容

{% comment %}
{{ content }}
<h2>注释内容</h2>
{% endcomment %}

上述内容不会在html中显示。

注:该标签不能被嵌套使用。

csrf_token标签

此标签用来实现CSRF保护。

cycle标签

用来进行循环的标签,但是只能循环3次。

{% cycle 'a' 'b' 'c' 'd' 'e' %}

前端渲染结果为:

也可以用模板变量代替字符串,或者2者混用。

cycle后面至少要有2项目,不然会报“模板语法”错误。

也可以使用别名:

{% cycle 'a' 'b' 'c' 'd' 'e' as kk %}
{{ kk }}

但是,效果却不是我们预期的那样:

想要我们预期的效果,标签最后加个silent参数:

{% cycle 'a' 'b' 'c' 'd' 'e' as kk silent %}
{{ kk }}

另外,如果想每次循环都重头开始(即3次都循环一个元素),使用{% resetcycle %}:

{% cycle 'a' 'b' 'c' 'd' 'e' as kk silent %}
{{ kk }}
{% resetcycle %}

debug标签

输出debug信息。不过注意,最好把该标签包含在<pre>元素中(对文本进行预格式化,pre用来显示格式化的内容),这样才能以友好的形式显示。

extends标签

用来拓展模板的。表明本模板的父模板。

{% extends "./base2.html" %}
{% extends "../base1.html" %}
{% extends "./my/base3.html" %}

从1.10开始可以写成相对路径。

filter标签

用来过滤。

{% filter force_escape|lower %}
This text will be HTML-escaped, and will appear in all lowercase.
{% endfilter %}

firstof标签

相当于if...else...

{% firstof var1 var2 var3 %}

等效于:

{% if var1 %}
{{ var1 }}
{% elif var2 %}
{{ var2 }}
{% elif var3 %}
{{ var3 }}
{% endif %}

也可以设置默认值:

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

for标签

用来循环。

如果变量对象如下:

c = [['hello','tom',],]

可以这样来取子列表的中的元素:

{% for a,b in content %}
<h4>{{ a }},{{ b }}</h4>
{% endfor %}

显示结果:

for...empty标签

条件不成立时,显示的对象。

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

if标签

用来做判断的,但是注意and的优先级高于or。

is用来判断值是否相同。

{% if somevar is True %}
This appears if and only if somevar is True.
{% endif %}

如果somevar = True则会显示文字,否则不显示内容;不存在的变量,值统一为None,可以依此判断对象是否存在。

include标签

用来设置公共模板。很多时候,该标签容易和extends标签弄混淆。但是一个作用是父模板,一个是公共模板。

{% include './public.html' %}

load标签

用来载入模板标签。

{% load foo bar from somelibrary %}

from关键字可以实现载入指定的几个模板标签。

now标签

用来显示时间。

It is {% now "jS F Y H:i" %}

分别表示日,月,年,小时,分钟。后面不加参数会报错!

可以取别名,使用as参数。

{% now "Y" as current_year %}
{% blocktrans %}Copyright {{ current_year }}{% endblocktrans %}

url标签

用来表示URL。

{% url 'app-views-client' client.id %}

client.id为URL中的参数。

还可以使用别名:

{% url 'some-url-name' arg arg2 as the_url %}

这样变量the_url就可以表示前面的URL。

static标签

用来载入静态资源。

{% load static %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />

总结:过滤器在此没有怎么讲,是因为我们在函数中能实现更加强大的过滤功能,很多过滤器不怎么用!更为详细的内容可以访问:

https://docs.djangoproject.com/en/1.11/ref/templates/builtins/

Django学习之模板标签和变量的更多相关文章

  1. django 学习-4 模板标签

    1.第一个标签是 if 标签 vim  learn/home.html <!DOCTYPE html><html><head>        <title&g ...

  2. django学习-6.模板templates

    1.前言 首先,我们要知道html是一门静态语言,里面没法传一些动态参数,也就是一个写死的html页面. 那么,如果我们想实现在一个html页面里传入不同的参数对应的参数值,这就可以用django框架 ...

  3. Django项目中模板标签及模板的继承与引用【网站中快速布置广告】

    Django项目中模板标签及模板的继承与引用 常见模板标签 {% static %} {% for x in range(x) %}{% endfor %} 循环的序号{% forloop %} 循环 ...

  4. django学习笔记-模板层

    模板层 将Python嵌入到HTML中. 模板简介 将HTML硬解码到视图并不是那么完美原因如下: 对页面设计时也需要对python代码进行相应的修改,模板可以不就行python代码修改的情况下变更设 ...

  5. Django常用的模板标签

    django 目前了解的各个文件的作用: manage.py:  运行服务 urls: 路由 views: 处理数据 传递给 html模板 html文件:  通过 {{变量名}}接收变量 通过 模板标 ...

  6. django学习--2 模板

    Django 模板 在上一章节中我们使用 django.http.HttpResponse() 来输出 "Hello World!".该方式将数据与视图混合在一起,不符合 Djan ...

  7. Django内置模板标签

    Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cy ...

  8. Django 内置模板标签和过滤器

    一.内置模板标签 语法:{%  %} autoescape : 是否转义,on或off作为参数,并确定自动转义是否在块内有效.该块以endautoescape结束 {% autoescape on % ...

  9. python3之Django内置模板标签和过滤器

    一.模板标签 内置标签: 1.autoescape 控制当前的自动转义行为,此标记采用on或者off作为参数,并确定自动转义是否在块内有效.该块以endautoescape结束标签关闭. views: ...

随机推荐

  1. POJ 2079 Triangle (凸包+旋转卡壳)

    [题目链接] http://poj.org/problem?id=2079 [题目大意] 给出一些点,求出能组成的最大面积的三角形 [题解] 最大三角形一定位于凸包上,因此我们先求凸包,再在凸包上计算 ...

  2. Problem S: 零起点学算法14——三位数反转

    #include<stdio.h> #include<stdlib.h> int main() { int a,b,c,s; scanf("%d",& ...

  3. Spark机器学习:TF-IDF实例讲解

    测试数据源:20 Newsgroups (http://qwone.com/~jason/20Newsgroups/),其中包含20个领域的新闻,此次我们使用20news-bydate-train作为 ...

  4. css sprite demo

    一张图片,用CSS分割成多个小图标. css样式: .icon{ background:url(../images/tabicons.png) no-repeat;width:18px; line-h ...

  5. 使用jQuery操作DOM(ppt练习)

    <!DOCTYPE html> <html> <head> <title>test3.html</title> <meta http- ...

  6. linux之cat,more,less,head,tail

    http://lionbule.iteye.com/blog/663549 1.cat # cat /etc/profile 注:查看/etc/目录下的profile文件内容: # cat -b /e ...

  7. Linux查找并删除重复文件的命令行fdupes工具,dupeGuru图形工具

    查了几十个网页,找到这个接近满意的解决方案http://unix.stackexchange.com/questions/146197/fdupes-delete-files-aft... 不过正则里 ...

  8. npm install -S -D -g 有什么区别

    npm install module_name -S    即    npm install module_name --save    写入dependencies npm install modu ...

  9. ParallelProgramming-多消费者,多生产者同时运行并行

    在上一篇文章演示了并行的流水线操作(生产者和消费者并行同时执行),C#是通过BlockingCollection这个线程安全的对象作为Buffer,并且结合Task来实现的.但是上一篇文章有个缺陷,在 ...

  10. HDU 2604 Queuing(矩阵高速幂)

    题目地址:HDU 2604 这题仅仅要推出公式来,构造矩阵就非常easy了.问题是推不出公式来..TAT.. 从递推的思路考虑.用f(n)表示n个人满足条件的结果.假设最后一个是m则前n-1人能够随意 ...