Flask 模板语言

Flask使用的是Jinja2模板引擎

举个例子:

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def index():
    name = "<h1>Hello</h1>"
    return render_template('index.html', name=name)


if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>hello, {{ name }}</h1>
</body>
</html>

模板的变量

在模板中使用的 {{ name }} 结构表示一个变量,它是一种特殊的占位符,告诉模 板引擎这个位置的值从渲染模板时使用的数据中获取。

Jinja2 能识别所有类型的变量,甚至是一些复杂的类型,例如列表、字典和对象。在模板 中使用变量的一些示例如下:

<p>A value from a dictionary: {{ mydict['key'] }}.</p>
<p>A value from a list: {{ mylist[3] }}.</p>
<p>A value from a list, with a variable index: {{ mylist[myintvar] }}.</p>
<p>A value from an object's method: {{ myobj.somemethod() }}.</p>

还有变量过滤器

Hello, {{ name|capitalize }}

值得主意的是:

safe 过滤器值得特别说明一下。默认情况下,出于安全考虑,Jinja2 会转义所有变量。例 如,如果一个变量的值为 '<h1>Hello</h1>',Jinja2 会将其渲染成 '&lt;h1&gt;Hello&lt;/ h1&gt;',浏览器能显示这个 h1 元素,但不会进行解释。很多情况下需要显示变量中存储 的 HTML 代码,这时就可使用 safe 过滤器。
千万别在不可信的值上使用 safe 过滤器,例如用户在表单中输入的文本。

 

if and for

{% if user %}     
Hello, {{ user }}!
{% else %}
Hello, Stranger!
{% endif %}

 

<ul>     
    {% for comment in comments %}         
        <li>{{ comment }}</li>     
    {% endfor %} 
</ul>

 

模板继承

<html>
<head>
    {% block head %}
    <title>{% block title %}{% endblock %} - My Application</title>
    {% endblock %}
</head>
<body>
{% block body %}
{% endblock %}
</body>
</html>
主板base.html

 

{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
    {{ super() }}
    <style>
    </style>
{% endblock %}
{% block body %}
<h1>Hello, World!</h1>
{% endblock %}
子板

 

 宏?感觉用不到吧

嘿嘿,不写了

 

posted @ 2016-11-19 16:45  我当道士那儿些年  阅读(265)  评论(0编辑  收藏  举报