广州番禺Python, Java小班周末班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6
4.3.1 django模板中的特殊符号
在4.2.2 节中对Django模板语言进行了简单介绍,在django模板语言中提供了三个个特殊符号:
1. {{}}
2. {%%}
3. {##}
{{}}符号定义与模板变量相关的操作,例如变量的引用,对模板变量进行过滤。{%%}符号用来定义与应用逻辑相关的操作,例如加载静态资源,条件控制,循环控制,安全控制等。{##}用来进行代码注释,同Python中的#。在本节的内容中,薯条老师以{{}}与{%%}符号为角度,来介绍django中的模板语言, 学习其核心概念及用法,化繁为简,这样可以降低学习的难度。
4.3.2 {{}}符号
在django中使用{{}}符号来引用模板变量,同时可以对模板变量进行过滤。
(1) 引用模板变量
在4.2.3 节中介绍了render函数,在render函数中可以传递一个上下文参数(context),该参数类型为字典类型,字典类型的键名可以在模板文件中通过{{}}符号来进行引用,模板变量的输出为对应的键值。模板变量举例, render函数中的context参数:
{"title": "jazz of Django"}
在模板文件中进行引用:
{{title}}
模板文件中的{{title}}变量,其输出为"jazz of Django"。
(2) 对模板变量执行过滤操作
对模板变量进行过滤,是指使用django的过滤器函数来对模板变量进行处理。使用过滤器进行操作的基本语法:
{{variable | filter}}
variable表示模板变量,filter表示过滤器名。过滤器中可以传递参数,语法形式为:
{{variable | filter:arg}}
arg表示给过滤器传递的参数。在django中使用|符号将变量与过滤器函数进行连接,这里的|符号充当一个管道,将模板变量作为参数传递给过滤器函数进行处理。
django中的常用过滤器:
default: 如果变量为False或空值,则设置一个默认值,否则输出变量本身的值。
用法举例:
{{title | default:"jazz of Django"}}
如果title对应的键值为False或空值,则输出默认值:jazz of Django,否则输出title对应的键值。
length: 输出变量的长度,
用法举例:
{{ title | length }}
假设在render函数中传递的context参数为{"title": "jazz of Django"},则{{ title | length}}的输出为键值"jazz of Django"的长度,值为14。
add: 对模板变量与add过滤器的参数执行加法操作。在add过滤器中会先将变量与参数转换为整型,如果转换失败,会执行变量类型的加法操作,例如字符串类型的加法操作,是将字符串进行拼接。如果变量类型不支持加法运算,则返回空字符。
用法举例:
{{ value | add: "2"}}
在上文代码中,如果value的值为2,则输出为4,add过滤器先将value的值与"2"都转换为整型,然后再执行加法运算,所以输出为4。如果value的值为B,则输出为B2,add过滤器在类型转换过程中失败,然后直接将"B"与"2"进行拼接,所以输出为B2。
cut: 删除模板变量中指定的字符,类似于python中的replace函数。
用法举例:
{{ title | cut: " "}}
假设title对应的键值为"jazz of Django",则{{ title | cut: " "}}表示删除title字符串中的所有空格字符,输出为:jazzofDjango,相当于执行了如下的代码:
title.replace(" ","")
lower,upper: lower,upper过滤器会分别将模板变量转换为小写,大写。
first,last: first,last过滤器会分别取出列表,元组,字符串类型的第一个元素,最后一个元素。
用法举例:
{{ stars | first }}
假设stars对应的键值为["林子祥", "刘德华"],则{{ stars | first}}的输出为:林子祥。
{{ stars | last }}
假设stars对应的键值为["林子祥", "刘德华"],则{{ stars | last}}的输出为:刘德华。
join: 将列表、元组、字符串用指定的字符进行拼接,列表,元组中的元素必须为字符串类型。
用法举例:
{{ stars | join:"@" }}
假设stars对应的键值为["林子祥", "刘德华"],则{{ stars | join:"@"}}的输出为:林子祥@刘德华。
date: 将日期类型按指定的格式格式化为一个字符串。
用法举例:
{{ anniversary | date:"%Y/%m/%d %H:%M:%S"}}
%Y,%m,%d,%H,%M,%S是日期的格式化符号,分别表示年,月,日,时,分,秒,在上文的过滤操作中,会将anniversary格式化为"%Y/%m/%d %H:%M:%S"格式的字符串。
safe
在django中,会自动对模板变量的内容进行HTML转义。例如模板变量的输出为:
<script>alert("黑客攻击")</script>
上述的输出为一段html代码,如果未进行转义,浏览器会弹出一个对话框。为了避免潜在的脚本注入攻击,django 会自动对用户的输入进行html转义。所谓的html转义是指将内容中的特殊字符用转义字符来进行代替。<符号与>符号是HTML中的特殊字符,其对应的转义字符分别为 < , >。
将html代码<script>alert("黑客攻击")</script>进行html转义,转义后的内容为:
<script>alert("黑客攻击")<script>
对模板变量使用safe过滤器,其作用是告诉django该变量的输出是安全的,无需进行HTML转义。以上为django模板中常用的过滤器,更多的过滤器,读者可以查阅官方文档。
4.3.3 {%%}符号
{%%}符号用来定义与应用逻辑相关的操作,其主要的应用包含以下四个方面:
1. 引用静态资源
(1) 加载static
{% load static %}
在模板文件中引用静态文件前,需要先加载static,这样才能在文件中使用static来引用静态文件。
可以在settings.py中将static配置为自动加载,这样就无需在每个模板文件中进行手动加载。方法为在全局变量TEMPLATES中的OPTIONS字典中,设置builtins属性的值:'builtins': ['Django.templatetags.static']
(2) 引用静态文件
{% static path %}
path表示静态文件相对于静态目录的路径,例如如下的一种目录结构:
└── static
├──images
│ ├── django.jpg
static目录为已配置的静态目录,则在模板中引用django.jpg的代码为:
{% static 'images/django.jpg' %}
2. 控制结构
django模板中的控制结构主要分为条件控制和循环控制。django模板中的控制结构同Python中的控制结构,但不同的是django中的条件控制会带上一个结束标签。
(1) Django模板中的条件控制结构
{% if %} {% elif %} {% else %} {% endif %}
上文中的endif即为if的结束标签。
条件控制结构代码举例:
render函数中的context参数:
{ "admin":True, "name":"Backer" }
模板文件中根据admin的值来输出不同的页面内容:
<div> {# 根据admin的值来判断是否为管理员 #} {% if admin %} <h2>管理员{{name}}</h2> {% else %} <h2>普通用户{{name}}</h2> {% endif %} </div>
django渲染后的html页面:
<div> <h2>管理员Backer</h2> </div>
读者要注意的是,在{%%}符号中引用变量时,无需再加上{{}}的符号。
(2) django模板中的循环控制结构
{% for in %} {% endfor %}
结构中的endfor为for结构的结束标签。
for循环控制结构代码举例:
render函数中的context参数:
{ "stars":[{"name":"刘德华", "weibo_url":"xxxx"},{"name":"林子祥", "weibo_url":"xxxx"}], }
模板文件中根据stars的值来输出明星的列表页:
<ul> {# django使用for循环来进行遍历,同Python中的for语句 #} {% for star in stars %} {# 使用成员操作符.来访问字典中的键 #} <li><a href="{{star.weibo_url]}}">{{star.name]}}的微博主页</a></li> {% endfor %} </ul>
django渲染后的html页面:
<ul> <li><a href="xxxx">刘德华的微博主页</a></li> <li><a href="xxxx">林子祥的微博主页</a></li> </ul>
3. 安全控制
django在模板中提供了防止CSRF的方法,CSRF全称为Cross Site Request Forgery,即跨站请求伪造。
CSRF是利用用户在浏览器中已认证的登录信息,在目标网站中执行一些恶意的攻击,关于CSRF以及web安全,会在后续的教程中进行详细讲解。
在form表单中加上如下一行代码,可以有效防范CSRF:
<form> {% csrf_token %} </form>
django在进行模板渲染时,如遇到{%csrf_token%}代码,会生成一段html的隐藏域代码,隐藏域代码举例:
<input type='hidden' name='csrfmiddlewaretoken' value='nWj2B3Md9Z134NmX1MXDolPmh3bR2G98' />
input标签中的value值为django生成的一个随机token值,通过该token值可以对浏览器的访问请求进行校验。django服务器如果校验token的值为空或者错误,会拒绝这个可疑请求。
4. 模板继承
django中的模板语言借鉴了面向对象的设计思想,可以对模板进行继承。通过模板继承,可以对模板代码进行复用,减少冗余。在4.4节中会对django的模板继承进行详细介绍。
4.3.4 特殊符号的关闭
在某些场景下,需要关闭模板语言中的特殊符号,以阻止django对模板变量以及模板标签的渲染。考虑如下的一种场景:
<html> {# 下面的if标签与django模板标签出现冲突 #} {%if admin %}<h2>管理员用户</h2>{%end%} </html>
假设代码中的{% if %} {% end %}为某种前端框架的模板标签,其与django中的模板标签出现了冲突,当django进行模板渲染时,会抛出语法错误的异常信息。为解决这样的问题,可以在代码中加上django的verbatim标签,以阻止django对模板标签的渲染。
django verbatim标签的语法形式:
{% verbatim %} {% endverbatim %}
使用verbatim标签的代码举例:
<html> {% verbatim %} {%if admin %}<h2>管理员用户</h2>{%end%} {% endverbatim %} </html>
在上文代码中,由于加上了verbatim的标签,django会停止对代码中的{%if%}标签进行渲染。通过在verbatim标签块中指定一个自定义的标签名称,可以阻止对verbatim标签的渲染(也包括阻止其它django标签的渲染)。在verbatim指定自定义标签名称的语法形式:
{% verbatim myblock %} {% endverbatim myblock%}
myblock表示自定义的标签名称。
代码举例:
{% verbatim myblock %} 阻止Django通过{% verbatim %}{% endverbatim %} 标签块来进行渲染 {% endverbatim myblock%}
4.3.5 最具实力的小班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4) Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取Python学习资料: