Django-模板层


title: Django-模板层
copyright: true
top: 0
date: 2019-07-11 21:34:25
tags:
categories: WEB 后端框架
permalink:
password:
keywords:
description: Django自带的模板层,语法类似Jinja2,但是略有区别,记录一下常见的功能。

你找到我的时候,我已经忘了你的样子。等我记起你的样子,你已经死了。

基础用法

变量

{{ variable=1 }}

或者定义临时变量

{% with variable=1 %}
{{variable}}
{% endwith %}

过滤器

default

为false或者空变量提供默认值,像这样:
{{ value|default:"nothing" }}

length

返回值的长度。它对字符串和列表都起作用。
{{ value|length }}
如果value是['a', 'b', 'c', 'd'],那么输出4。

filesizeformat

格式化为“人类可读”文件大小单位(即'13 KB',4.1 MB','102 bytes'等)。
{{ value|filesizeformat }}
如果value是123456789,输出将会是117.7MB。

标签

for循环标签

循环对象中每个元素。需要结束标签

{% endfor %} 

例如,显示athlete_list中提供的运动员列表:

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

if,elif和else标签

计算一个表达式,并且当表达式的值是“True”时,显示块中的内容。需要

{% endif %}.

结束标签。整体逻辑非常类似Python的if、elif和else,如下所示。:

{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% elif athlete_in_locker_room_list %}
    Athletes should be out of the locker room soon!
{% else %}
    No athletes.
{% endif %}

在上面的例子中,如果athlete_list不是空的,运动员的数量将显示为{{ athlete_list|length }}。否则,如果athlete_in_locker_room_list不为空,将显示“Athletes should be out…”。如果两个列表都是空的,将显示“No athletes.” 。

还可以在if标签中使用过滤器和多种运算符:

{% if athlete_list|length > 1 %}
   Team: {% for athlete in athlete_list %} ... {% endfor %}
{% else %}
   Athlete: {{ athlete_list.0.name }}
{% endif %}

需要注意,大多数模版过滤器都返回字符串类型,所以使用过滤器做整数类型的比较通常是错误的,但length是一个例外。

block和extends标签

继承和复写模版。类似Python的类继承和重写机制。

写一个通用模板,命名 base.html

其他模板调用这个通用模板使用命令:

{% extends "base.html" %}

block是在子模版中可能会被覆盖掉的位置。在上面的例子中,block标签定义了三个可以被子模版内容填充的block,分别是title、content和siderbar。

base.html 的内容可以是如下:

 <meta charset="UTF-8">
 <title>Domains Info Scan</title>
<head>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>

<title>
{% block title%} {% endblock %}
</title>

<body>
{% block content%}

{% endblock%}
</body>

即block类似于重写部分,上面的文件中,blcok 定义的变量命名为title 那么继承的时候需要保持名字事一样的

{% extends "base.html" %}
{% block title %}我是新标题{% endblock %}

{% block content %}
<h1>6666666</h1>
{% endfor %}
{% endblock %}

注释

下面的模版将被渲染为’hello’:

{# greeting #}hello

注释可以包含任何模版内的代码,有效的或者无效的都可以。 像这样:

{# {% if foo %}bar{% else %} #}

自动转义HTML

对于单个变量:

使用safe过滤器来关闭变量上的自动转义:

This will be escaped: {{ data }}
This will not be escaped: {{ data|safe }}

safe是safe from further escaping或者can be safely interpreted as HTML的缩写。

在上面的例子中,如果data含有,输出会是:

This will be escaped: &lt;b&gt;
This will not be escaped: <b>

对于模板块:

要控制模板上的自动转义,将模板(或者模板中的特定区域)包裹在autoescape标签中,像这样:

{% autoescape off %}
    Hello {{ name }}
{% endautoescape %}

内置标签

标签	说明
autoescape	自动转义开关
block	块引用
comment	注释
csrf_token	CSRF令牌
cycle	循环对象的值
debug	调试模式
extends	继承模版
filter	过滤功能
firstof	输出第一个不为False的参数
for	循环对象
for … empty	带empty说明的循环
if	条件判断
ifequal	如果等于
ifnotequal	如果不等于
ifchanged	如果有变化,则..
include	导入子模版的内容
load	加载标签和过滤器
lorem	生成无用的废话
now	当前时间
regroup	根据对象重组集合
resetcycle	重置循环
spaceless	去除空白
templatetag	转义模版标签符号
url	获取url字符串
verbatim	禁用模版引擎
widthratio	宽度比例
with	上下文变量管理器

内置过滤器

过滤器	说明
add	加法
addslashes	添加斜杠
capfirst	首字母大写
center	文本居中
cut	切除字符
date	日期格式化
default	设置默认值
default_if_none	为None设置默认值
dictsort	字典排序
dictsortreversed	字典反向排序
divisibleby	整除判断
escape	转义
escapejs	转义js代码
filesizeformat	文件尺寸人性化显示
first	第一个元素
floatformat	浮点数格式化
force_escape	强制立刻转义
get_digit	获取数字
iriencode	转换IRI
join	字符列表链接
last	最后一个
length	长度
length_is	长度等于
linebreaks	行转换
linebreaksbr	行转换
linenumbers	行号
ljust	左对齐
lower	小写
make_list	分割成字符列表
phone2numeric	电话号码
pluralize	复数形式
pprint	调试
random	随机获取
rjust	右对齐
safe	安全确认
safeseq	列表安全确认
slice	切片
slugify	转换成ASCII
stringformat	字符串格式化
striptags	去除HTML中的标签
time	时间格式化
timesince	从何时开始
timeuntil	到何时多久
title	所有单词首字母大写
truncatechars	截断字符
truncatechars_html	截断字符
truncatewords	截断单词
truncatewords_html	截断单词
unordered_list	无序列表
upper	大写
urlencode	转义url
urlize	url转成可点击的链接
urlizetrunc	urlize的截断方式
wordcount	单词计数
wordwrap	单词包裹
yesno	将True,False和None,映射成字符串‘yes’,‘no’,‘maybe’

欢迎关注公众号:【安全研发】获取更多相关工具,课程,资料分享哦~
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪子燕青啦啦啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值