Django学习之模板标签和变量
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学习之模板标签和变量的更多相关文章
- django 学习-4 模板标签
1.第一个标签是 if 标签 vim learn/home.html <!DOCTYPE html><html><head> <title&g ...
- django学习-6.模板templates
1.前言 首先,我们要知道html是一门静态语言,里面没法传一些动态参数,也就是一个写死的html页面. 那么,如果我们想实现在一个html页面里传入不同的参数对应的参数值,这就可以用django框架 ...
- Django项目中模板标签及模板的继承与引用【网站中快速布置广告】
Django项目中模板标签及模板的继承与引用 常见模板标签 {% static %} {% for x in range(x) %}{% endfor %} 循环的序号{% forloop %} 循环 ...
- django学习笔记-模板层
模板层 将Python嵌入到HTML中. 模板简介 将HTML硬解码到视图并不是那么完美原因如下: 对页面设计时也需要对python代码进行相应的修改,模板可以不就行python代码修改的情况下变更设 ...
- Django常用的模板标签
django 目前了解的各个文件的作用: manage.py: 运行服务 urls: 路由 views: 处理数据 传递给 html模板 html文件: 通过 {{变量名}}接收变量 通过 模板标 ...
- django学习--2 模板
Django 模板 在上一章节中我们使用 django.http.HttpResponse() 来输出 "Hello World!".该方式将数据与视图混合在一起,不符合 Djan ...
- Django内置模板标签
Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cy ...
- Django 内置模板标签和过滤器
一.内置模板标签 语法:{% %} autoescape : 是否转义,on或off作为参数,并确定自动转义是否在块内有效.该块以endautoescape结束 {% autoescape on % ...
- python3之Django内置模板标签和过滤器
一.模板标签 内置标签: 1.autoescape 控制当前的自动转义行为,此标记采用on或者off作为参数,并确定自动转义是否在块内有效.该块以endautoescape结束标签关闭. views: ...
随机推荐
- [Codeforces 8E] Beads
Brief Intro: 将所有n位二进制串中满足字典序不大于其逆序串,取反串,逆序取反串中按字典序排序的第m个输出 n<=50 Algorithm: 首次接触数位DP的题目 根据数据范围,我们 ...
- [BZOJ 3571] 画框
Link: BZOJ 3571 传送门 Solution: 和 BZOJ2395 的建模完全相同,(BZOJ2395 题解传送门) 仅仅是将其中的基础问题由最小生成树改成了二分图最大完美匹配 只要将原 ...
- 【2-SAT】URAL - 2089 - Experienced coach
题意:给出n对点a,b 要求从没对点中选出一个,且最终选出的点n个数不能存在相同的.输入数据满足每种数最多出现3次,最少出现1次 思路:第i对点的编号2*i, 2*i+1, 因为每个数最多出现3 ...
- Swift中结合使用枚举与Switch
定义: 用法:
- 再谈EditText只能输入金额
上次写了一篇EditText只能输入金额的博客,后来发现一个bug,当还未输入数字的情况下输入小数点程序就崩了,我去测了一下支付宝,看看会怎么样,我先输入小数点,程序正常,我再输入数字,可以正常输入, ...
- Ubuntu 16.04使用rm -rf误删文件恢复方法收集
说明:不一定有效,需要不断尝试 一.lsof 文件刚刚被删除,想要恢复,先尝试lsof. lsof |grep data.file1 cp /proc/xxx/xxx/xx /dir/data.fil ...
- 通过映射缓存文件夹加速WPF的响应速度
到了Visual Studio 2012时,WPF的设计器已经非常好用了,大多数的时候基本上可以抛弃Blend了.但是,仍然存在一些不令人满意的问题,那就是当项目非常大的时候,很多时候页面切换变得比较 ...
- Delphi 通过SQLite3, SQLiteTable3 操作数据库
var sql, sFile:string; db:TSQLiteDatabase;begin try sFile := G_AppPath + CH_IPC712Db; //if FileExist ...
- HTTP协议下保证登录密码不被获取最健壮方式
原文:http://www.cnblogs.com/intsmaze/p/6009648.html HTTP协议下保证登录密码不被获取最健壮方式 说到在http协议下用户登录如何保证密码安全这个问 ...
- 【mybatis】mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wait timeout exceeded; try restarting transaction
今天使用mybatis和jpa的过程中,发现这样一个问题: mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wai ...