flask之模板

模板的使用html

 

Flask使用的是Jinja2模板,因此其語法和Django無差異前端

 

1.每個模板中均可以調用的函數django

@app.template_global()
def ad(a1,a2):
    """
    每一個模板中能夠調用的函數
    :param a1:
    :param a2:
    :return:
    """
    return a1+a2

2.爲了防止xss攻擊,加了驗證,頁面上顯示的是字符串的形式,咱們不想讓他這樣顯示,因此有兩種方式json

方式一:在後端導入Markupflask

from flask import Flask,render_template,redirect,jsonify,make_response,Markup def gen_input(value): return Markup("<input value='%s'/>" %value)

方式二:後端

在前端加|safeapp

   <h1>{{k5(99)|safe}}</h1>

3.模板繼承xss

和django的同樣,extends函數

4.舉例spa

s1.py

from flask import Flask,render_template,redirect,jsonify,make_response,Markup

app = Flask(__name__)

@app.template_global()
def ad(a1,a2):
    """
    每一個模板中能夠調用的函數
    :param a1:
    :param a2:
    :return:
    """
    return a1+a2


def gen_input(value):
    # return Markup("<input value='%s'/>" %value)
    return "<input value='%s'/>" %value
@app.route('/index',methods=['GET','POST'])
def index():
    context = {
        'k1':123,
        'k2':[11,22,33],
        'k3':{'name':'oldboy','age':73},
        'k4':lambda x:x+1,
        'k5':gen_input,

    }
    return render_template('index.html',**context)


@app.route('/x2',methods=['GET','POST'])
def order():
    context = {
        'k1':123,
        'k2':[11,22,33],

    }
    return render_template('order.html',**context)

if __name__ == '__main__':
    app.run()

templates

  layout.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>頭部</div>
<div>
    {% block content%}
    {% endblock%}
</div>
<div>底部</div>
</body>
</html>

index.html

{% extends 'layout.html'%}
{% block content%}
   <h1>{{k1}}</h1>
   <h1>{{k2.0}} {{k2[1]}}</h1>
   <h1>{{k3.name}} {{k3['age']}} {{k3.get('name',888)}} </h1>
   <h1>{{k4(66)}}  </h1>
   <!--<h1>{{k5(99)}}  </h1>-->

   <h1>{{ad(1,2)}}  </h1>

{% endblock %}

order.html

{% extends 'layout.html'%}
{% block content%}
 <h1>{{ad(1,2)}}  </h1>
{% endblock %}
相關文章
相關標籤/搜索