Django模板语言DTL中的变量和标签

1、DTL的变量
  • 模板中可以包含变量,Django在渲染模板的时候,可以传递变量对应的值过去进行替换。DTL语言将两个大括号对里的内容当作变量名。
  • 变量的命名规范和Python非常类似,只能是阿拉伯数字和英文字符以及下划线的组合,不能出现标点符号等特殊字符。
  • 变量需要通过视图函数渲染,视图函数在使用render或者render_to_string的时候可以传递一个context的参数,这个参数是一个字典类型,以后在模板中的变量就从这个字典中的KEY读取值的。
#HTML中的代码:
<title>{{title}}</title>

#views.py中的代码:

def index(request):
	#处理数据
	content = {
		"title":"欢迎来到"
	}
	
	#渲染界面
	return render(request,"book/index.html",context=content)

如果渲染的数据的类型为:字典/元组/列表,在模板引擎中不支持通过[索引]的形式访问
只能通过 . 的形式访问,例如:变量.索引(而且还不支持负数)

2、DTL的标签
1)分支标签
  • 在DTL中,所有标签都需要用标签限定符{% %}进行包裹。所有的标签都需要有结束限定符来指定
'''
	if标签
	相当于python中的if语句,有elif 和else 相对应
	if标签可以使用==, !=, <, >, >=, in, not, is, is not等判断运算符
'''
(% if 'python' in book %)
	<div>开始学习Python</div>
{% else %}
	<div>开始学习吗?</div>
{% endif %}
2)遍历迭代标签
  • 可以遍历列表、元组、字符串、字典等一切可以遍历的对象
  • 其中遍历字典的时候,需要调用字典的 .items 方法

for… in…标签:

#遍历字典的地方少:
{% for key,value in data.items %}
	{{key}}:{{value}}
{% endfor %}

#如果要反向遍历,那么在遍历的时候加上一个reversed
{% for obj in list reversed %}

'''
在for循环中,DTL提供了一些变量可供使用。这些变量如下:
	forloop.counter----->当前循环的下标。以1作为起始值(编号时使用)
	forloop.counter0----->当前循环的下标。以0作为起始值
	forloop.revounter------> 当前循环的反向下标值。比如列表有5个元素,那么第一个遍历这个属性是等于5,第二次是4,以此类推。并且是以1作为最后一个元素的下标。
	forloop.revcounter0------>类似于上边这个,不同的是最后一个元素的下标从0开始
	forloop.first----->是否是第一次遍历。(第一个值)
	forloop.last-----> 是否是最后一次遍历。
	forloop.parentloop----->如果有多个循环嵌套,那么这个属性代表的是上一级的for循环
'''

for … in … empty 标签:

  • 这个标签使用方法同上,只不过在遍历的对象如果没有元素的情况下会执行empty中的内容
<ul>
	{% for athlete in athlete_list %}
		<li>{{athlete}}</li>
	{% empty %}
		<li>Sorry,no athletes in this.list</li>
	{% endfor %}
</ul>
3)URL解析标签(重点)
  • 类似于Django中的reverse一样,主要应用的元素就是a标签
  • 它的参数是通过空格来分隔的
<li><a href=" {% re_path '首页' %} ">首页</a></li>
<li><a href="{% re_path '事项' %}">事项</a></li>
4)转义标签
'''
[autoescape off/on]
	开启和关闭这个标签内的元素的自动转义功能。自动转移是可以将一些特殊字符。例如<转译成html语法能识别的字符,<就被转义成&lt;,而>会被自动转移成&gt;。模板默认是已经开启了自动转义的。
'''
{% autoescape on %}
	{{body}}
{% endautoescape %}

举例如下:

#views.py中代码:
def index(request):
	content = {
		"content":"<h1>数据库查询出来的代标签的内容</h1>"
	}
	return render(request,"book/index.html",context=content)

#HTML中的内容
<div>
	{% autoescape off %}
		{{content}}
	{% endautoescape%}
</div>

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值