Python 这个模板渲染引擎的名字起的还是很讲究的,看看官网上作者对这个框架名字的介绍:
Why is it called Jinja?
The name Jinja was chosen because it’s the name of a Japanese temple and temple and template share a similar pronunciation. It is not named after the city in Uganda.
作者以日本词「神社」的日语发音,作为这个框架的名字,如果你想体验下日文「神社」的读法,可以去谷歌翻译感受下,下图是谷歌翻译的截图。
我们再来看看 Jinja 的 LOGO 长成什么样子:
Jinja看完,你是不是在想这个 LOGO 是不是和日本神社有关系呢,你猜的没错,还真有关系。来看下日本广岛县「严岛神社」里面非常好看的一个「鸟居」。
严岛神社 · 鸟居这下你明白了吧,Jinja 的 LOGO 就是日本严岛神社的鸟居。看来作者挺喜欢日本文化,可能还去过日本。
如果我们较真点的话,作者给自己这个框架取的名字其实是错误的,应该叫 Torii (鸟居)而不是 Jinja(神社)。
问题来了,日本神社文化中最重要的鸟居文化,是怎么来的呢。
日本作家,铃木三重吉根据「古事记」写了一本儿童都能看懂的书——古事记物语,里面有一章 天之岩洞 描写了这样一个故事:
天照大神小姐姐,有一个不听话的弟弟,弟弟比较淘气,淘气本没有什么问题,但是因为姐姐的纵容,导致弟弟杀了人,天照大神就比较难受,责怪自己,没脸见人了,就躲在山洞里面去了,但是天照大神有点中国太阳神的功能,她躲起来了,人间一片黑暗,然后就妖魔横行了。众神肯定看不下去呀,就想着怎么把天照大神给引出来,最后想了一招——跳大神(开玩笑的),众神找来公鸡放在架子上,让美女伴随着鸡叫,在天照大神洞口跳了起来,一阵狂歌乱舞,在山洞里面的天照大神就比较好奇了,外面这是发生了啥,就想着推开石块悄悄地搂一眼,结果一露头石块就被一位叫「手力男」的大神给推开了,天照大神再现人间。
这个故事和鸟居有啥关系呢,我们都知道公鸡蹲的架子叫鸡架,当然鸡睡觉肯定也在鸡架上,这时候也可以改叫鸡居,日文「鸟」和「公鸡」的发音差不多,后来就叫「鸟居」了。
这就是日本鸟居的来历了,另外提一句「古事记物语」这本书也不知道怎么形容,反正我看是写的挺狗血的,比如——「女神之死」这章。
天地创世之初,伊奘诺神与伊奘冉神两位男女神灵来到人间,造了日本岛这个岛屿,然后在上面居住,后来伊奘冉神给伊奘诺神生猴子的时候,挂了。伊奘诺神伤心的不行,就把新出生的孩子给杀了,你没看错是给杀了,狗血的剧情到这还不算完,伊奘诺神还是不愿意接受自己媳妇挂了,追到阴间,见到了死去妻子的模样,被吓得够呛,然后二人就结仇了,刚刚两人还恋恋不舍呢。这剧情反转的过快我已无法接受。
还有好多故事,大家自己去看吧。
Jinja2 的简单使用
无论哪个后端语言的模板渲染,其实都大同小异,你最重要的无非就是掌握两点:
- 如何往 HTML 文件里面注入变量,Jinja 通过
{{ variable }}
- 在 HTML 里面如何写逻辑代码,Jinja 通过
{% if a == 10 %}
掌握简单的这两点就行了,完全能应付平时工作中的调试就完了,没必要学的像一个专业的前端,不然前后端分离的不就没意义了吗,好了简单来看一个水果大全的例子。
main.py 文件的内容:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/fruits', methods=['GET', 'POST'])
def getDataList(): # 视图函数
dataList = [
{
"id": 1,
"en": "apple",
"cn": "苹果"
},
{
"id": 2,
"en": "banana",
"cn": "香蕉"
},
{
"id": 3,
"en": "pear",
"cn": "梨子"
},
{
"id": 4,
"en": "peach",
"cn": "桃子"
},
{
"id": 5,
"en": "grape",
"cn": "葡萄"
},
{
"id": 6,
"en": "pineapple",
"cn": "菠萝"
},
{
"id": 7,
"en": "mango",
"cn": "芒果"
},
{
"id": 8,
"en": "strawberry",
"cn": "草莓"
}
]
return render_template('fruits.html', fruits=dataList, title="水果大全")
if __name__ == '__main__':
app.run()
render_template 函数会在同级目录下的 template 文件夹里面寻找 fruits.html 文件,fruits.html 文件的内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{title}}</title>
</head>
<body>
<h1>水果大全</h1>
<ul>
{% for fruit in fruits %}
<li title="{{ fruit.en }}">{{ fruit.cn }}</li>
{% endfor %}
</ul>
</body>
</html>
运行,然后浏览器访问查看结果:
好了,用到别的 API 随时查文档:https://jinja.palletsprojects.com/en/2.11.x/
网友评论