前面我们成功实现了url返回html页面,但是返回的都是静态页面。实际生产中往往都是根据后端返回的内容进行动态显示,这一节我们就一起来看看如何通过模板语言jinja来实现动态页面。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢
什么是jinja?
jinja是python中被广泛使用的模板引擎,通过在html页面中加入jinja代码,真正在返回给用户的时候将这些jinja代码替换为后端传递过来的内容,而实现动态内容的呈现。
jinja的语法比较多,我们这一节主要是看一下变量替换和for循环,更多的jinja语法可以查看我的另一篇博客《Saltstack入门到精通教程(五):Jinja详解》。saltstack也是基于python的,所以用的也是jinja模板,异曲同工。
变量替换
还是用上一节的新应用Two来举例子。
在Two/urls.py
中加入路由规则如下,也就是访问ip:port/two/testjinja.html/
的url都会交给Two/views.py
中的test_jinja
函数去处理
path('testjinja.html/', views.test_jinja)
然后去构建一个这个函数,顺便再安利一下pycharm的万能键Alt + Enter,自动帮我们完成函数的定义语法
def test_jinja(request):
context = {
'name': 'xiaofu',
'age': 2,
'hobby': ['basketball','swimming','photography']
}
return render(request,'testjinja.html',context=context)
重点来了!!
跟之前的render函数相比,这里除了html模板名字还加了一个context参数,而传递给这个参数的是一个字典,定义了一个string,一个int,还有一个list。
然后去templates文件夹里面创建一下这个testjinja.html
,额外说一下,快速创建两个<li>
的快捷键是敲li*2
然后按tab。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jinja</title>
</head>
<body>
<li>name: {{ name }}</li>
<li>age: {{ age }}</li>
</body>
</html>
第二个重点来了!!
两个<li>
中用两个大括号报过了一个变量名,这是jinja中显示变量的格式,而且要注意大括号和变量之间有一个空格,不能省略。pycharm支持jinja快捷键,直接敲两个左大括号就能自动生成右大括号和空格。
其余的jinja格式可以通过快捷键Ctrl + j来快速输入,见下面for循环的演示
这样上面context中的name
和age
两个变量就会在这里显示,如下
for循环
但是想显示context的第三个参数,也就是一个list,用上面的方法只能在网页中显示一个带中括号的list。如果想要将list的元素单独显示,需要用到jinja中的for循环。
修改jinjatest.html
如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jinja</title>
</head>
<body>
<li>name: {{ name }}</li>
<li>age: {{ age }}</li>
<h2>hobby:</h2>
{% for item in hobby %}
<li>{{ item }}</li>
{% endfor %}
</body>
</html>
重点又来了!!!
这里用一个for循环对hobby进行循环,和python一样,这里的变量item不需要提前定义,然后用上面显示变量的方法对每个item进行输出。这里直接敲for加上tab就会自动生成for循环结构,不需要自己完整敲出来。
再来看看网页显示,如下
总结
这里只是抛砖引玉,jinja的功能十分强大,而且不仅在Django中有用,Flask中也是有用,更多的jinja语法可以查看我的另一篇博客《Saltstack入门到精通教程(五):Jinja详解》。