前言
这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题
于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。
微信小程序搜索:Python面试宝典
或可关注原创个人博客:https://lienze.tech
也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习
其他常用标签
其实django
官方提供了不只if
和for
这样的模板标签,还提供了很多可以让我们在模板页面上实现之前只能在后台进行逻辑实现的功能标签。
comment 标签
comment
标签常用来注释,在{% comment %}
和{% endcomment %}
中间的部分内容会被忽略;
这个标签不能嵌套使用
{% comment %}
这里的内容会被忽略,相当于注释起来。
{% endcomment %}
autoescape 标签
默认情况下,为了安全起见,模板在接收到一个HTML
标签或者css
样式等具有实际意义的变量字符串时;
会对他进行转义,不会将这个字符串处理为HTML中实际的标签。一个<h1>
标签到最后会被处理成:<h1>
,这样浏览器就不会把他解释成一个标签的样式了
- 转义规则
符号 | 转义规则 |
---|---|
< | < |
> | > |
'(单引号) | ' |
"(双引号) | " |
& | & |
那么有的时候,我们可能需要这样类似的HTML标签真正效果展示出来,比如一个<h1>
标签我们希望他真正展示出h1
的样子,而不是一个朴素的<h1>
字符串,那么就需要我们使用autoescape标签来进行防止转义处理
str_ = "<h1>这是H1标签</h1>"
{% autoescape on %}
{{ str_ }}
{% endautoescape %}
{% autoescape off %}
{{ str_ }}
{% endautoescape %}
cycle 标签
cycle
标签提供一些可迭代数据;它的结构像是一个环,其中的数据通过空格分割,你可以使用任意数量的值,作为接下里每一次循环迭代的数据。其他包含在单引号 '
或者双引号 "
中的值被认为是可迭代字符串,如果没有被字符串引号包围的值被当作模版变量
list_ = ['l','i','s','t'] # 视图定义的模板变量
<style>
.red{
color:red;
}
.blue{
color:blue;
}
</style>
{% for var in list_ %}
<p class="{% cycle 'red' 'blue' %}">
{{ var }}
</p>
{% endfor %}
很简单的就可以通过cycle
标签进行循环中的样式切换;循环遍历出来的列表中每一个字都是换着颜色展示
某些时候,我们可能希望在使用一次cycle
之后,接下来使用不是继续向后迭代取值,而是继续沿用这一次取到的值,那么我们可以通过as
语法给cycle
标签取别名,在接下来需要沿用的地方直接使用别名作为模板变量即可,比如这样
{% for var in list_ %}
<p>
{% cycle 'red' 'blue' as style %}
</p>
<span>{{ style }}</span>
<span>{{ style }}</span>
{% endfor %}
每一次循环取到的cycle其中的值,都可以通过别名style在这次循环区域中重复利用而不递进
但是我们发现个问题,as
语句本身在使用时也会造成对cycle
中的数据进行一次取值,那有什么办法可以在第一次as
语句出现时,我只做声明,而不是为了取值,django
模板中提供了一个叫silent
的属性,可以用来as
命名时不进行取值动作
{% cycle 'red' 'blue' as style silent %}
{% cycle 'red' 'blue' as style silent %}
<h1>{{ style }}</h1>
<h1>{{ style }}</h1>
{% cycle style %}
<h1>{{ style }}</h1>
{% cycle style %}
<h1>{{ style }}</h1>
<h1>{{ style }}</h1>
通过silent
可以在初次定义时不进行取值,接下来使用cycle
所创建的迭代器,每次访问得到当前值,不会继续向后迭代;
如果希望取到下一个值,可以使用迭代器标签{% cycle style %}
,这次访问不会生产数据,但是会让迭代访问位置向后推进一次,在接下来{{ style }}
使用将得到下一个值
red
red
blue
red
red
ifchanged 标签
ifchanged
标签用在for
标签中;检测这一次迭代的值和上一次迭代的值是否有改变,可以搭配else
标签使用,用来确定是没有改变;检查标签{% ifchanged %}
和{% endifchanged %}
之间的数据在每一次迭代过程中是否发生改变
list_ = [1,1,1,2,3]
{% for var in list_ %}
{% ifchanged %}
{{ var }}
{% else %}
数据未发生变化
{% endifchanged %}
<br>
{% endfor %}
1
数据未发生变化
数据未发生变化
2
3
firstof 标签
firstof
标签用来查找到标签内变量中第一个为True
的参数并输出,如果标签内变量均为False
,那么输出空
{% firstof 0 0 0 0 0 "哈哈哈" %}
哈哈哈
ifequal 标签
ifequal
标签接收两个变量,用来判断这两个值是否相等,如果相等,展示对应内容
{% ifequal 1 "1" %}
<h3>两个值相等</h3>
{% else %}
<h3>两个值不等</h3>
{% endifequal %}
<br>
- 这都不用想的,俩类型都不一样
ifnotequal 标签
ifequal的反义
now 标签
显示日期或时间,标签必须一个参数,用来指定当前时间日期的描述方式;输出最终格式与项目时区及语言设置有关。参数是一个描述字符串,比较多,记着常用的就行
秒 | |
---|---|
u | 微妙,000000-999999 |
s | 秒,00-59 |
Z | 时区偏移量(UTC),单位为秒。-43200到43200 |
U | 自Unix 时间以来的秒数。1970年1月1日00:00:00 UTC |
分钟 | |
---|---|
i | 分钟,00-59 |
小时 | |
---|---|
g | 12小时格式,1-12’ |
G | 24小时格式,00-23 |
h | 12小时格式,00-12 |
H | 24小时格式,00-23 |
O | 时区差值,单位小时,如:Asia/Shanghai时区:+0800 |
P | 当前几时几分,如:5:30 pm |
f | 当前几时几分,不包含上下午标示,如:5:30 |
a | 小写字母:a.m.、p.m. |
A | 大写字母:AM、PM |
月份 | |
---|---|
b | 月份英文字母的前三个表示,均小写。如:“aug” |
d | 这个月的第几天,01-31 |
j | 这个月的第几天,1-31 |
E | 当前时区月份英文单词全拼 |
F | 当前月份英文单词全拼 |
m | 第几月,01-12 |
M | 月份英文字母的前三个表示,首字母大写。如:“Aug” |
n | 第几月,1-12 |
N | 美联社月份缩写,如:‘Jan.’,‘Feb.’,‘March’,‘May’ |
星期 | |
---|---|
D | 星期几的英文单词前三个表示,首字母大写,如:‘Fri’ |
l | 星期几的英文单词全拼,如:‘Friday’ |
w | 星期几的数字,0(星期日)-6(星期六) |
W | ISO-8601周数,今年第几周 |
年 | |
---|---|
L | Bool值判断是否为闰年 |
y | 第几年两位数字,如:2018年,返回18 |
Y | 第几年,目前是:2018 |
Z | 今天是今年的第几天 |
其他 | |
---|---|
c | ISO 8601时间格式 |
e | 当前时区名称:CST(美国-6:00,澳大利亚+9:30,中国+8:00,古巴-4:00) |
r | RFC 5322格式化日期 |
S | 一个月的第几天的英文序数后缀:‘st’,‘nd’,‘rd’或’th’ |
t | 当前月份的天数:28-31 |
T | 当前时区 |
- 选出你想表达的时间,比如年月日,那么可以这样
{% now "Y-m-d" %}
2019-03-26
- 除了以上自己组合的格式化字符,还有一些已经预定义好的字符串
字符串 | 对应格式 时间 |
---|---|
DATE_FORMAT | ‘N j, Y’ Feb. 5, 2018 |
DATETIME_FORMAT | ‘N j, Y, P’ Feb. 4, 2013, 4 p.m. |
SHORT_DATE_FORMAT | ‘m/d/Y’ 12/31/2015 |
SHORT_DATETIME_FORMAT | ‘m/d/Y P’ 12/31/2019 11:59 p.m. |
<ul>
<li>DATE_FORMAT: {% now "DATE_FORMAT" %}</li>
<li>DATETIME_FORMAT: {% now "DATETIME_FORMAT" %}</li>
<li>SHORT_DATE_FORMAT: {% now "SHORT_DATE_FORMAT" %}</li>
<li>SHORT_DATETIME_FORMAT: {% now "SHORT_DATETIME_FORMAT" %}</li>
</ul>
DATE_FORMAT: March 26, 2019
DATETIME_FORMAT: March 26, 2019, 3:45 a.m.
SHORT_DATE_FORMAT: 03/26/2019
SHORT_DATETIME_FORMAT: 03/26/2019 3:45 a.m.
最后now
标签也支持as
的用法,可以方便我们在模板中使用一个已经格式化好的输出
{% now "Y-m-d H:i:s" as show_time %}
<p>{{ show_time }}</p>
发现时间输出不正确,记得查看settings
文件下的TIME_ZONE
配置