Flask-模板渲染与继承

一.模板渲染

使用render_template()方法来渲染模板。第一个参数是模板名字符串,模板变量以关键字参数的方式传入。

这里有一个展示如何渲染模板的简例:

#coding:utf-8

from flask import Flask,render_template
app = Flask(__name__)

@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    return render_template('hello.html', name=name)

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

Flask 会在 templates 文件夹里寻找模板,requestsessiong对象以及get_flashed_messages()函数不需要作为参数传入传入,在模板里可以直接访问。此外,模板的自动转义功能默认是开启的,所以如果传入的变量包含 HTML ,它将会被自动转义。如果你能信任一个变量,并且你知道它是安全的,你可以用 Markup 类或 |safe 过滤器在模板中把它标记为安全的。以name变量为例,

Markup类的使用:

# coding:utf-8

from flask import Flask,render_template,Markup

@app.route(/test/<name>)
def test(name=None):
    return render_template('test.html',name = Markup(name))

 

 

二、模板继承

模板继承允许你创建一个基础的骨架模板, 这个模板包含您网站的通用元素,并且定义子模板可以重载的 blocks 。

基础模板base.html

<!doctype html>
<html>
  <head>
    {% block head %}
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
    <title>{% block title %}{% endblock %} - My Webpage</title>
    {% endblock %}
  </head>
<body>
  <div id="content">{% block content %}{% endblock %}</div>
  <div id="footer">
    {% block footer %}
    &copy; Copyright 2010 by <a href="http://domain.invalid/">you</a>.
    {% endblock %}
  </div>
</body>

子模板负责填充空白的 block,基础模板使用{% block %} 标签定义了四个子模板可以重载的块。block标签所做的所有事情就是告诉模板引擎: 一个子模板可能会重写父模板的这个部分。

 

子模板test.html

{% extends "layout.html" %}
{% block title %}Index{% endblock %}
{% block head %}
  {{ super() }}
  <style type="text/css">
    .important { color: #336699; }
  </style>
{% endblock %}
{% block content %}
  <h1>Index</h1>
  <p class="important">
    Welcome on my awesome homepage.
{% endblock %}

{% extends %}是这个例子的关键,它会告诉模板引擎这个模板继承自哪一个模板, 模板引擎分析这个模板时首先会定位其父模板。extends 标签必须是模板的首个标签。如果改写父模板block标签里的内容,使用标签{% block 块名%} 添入的新内容 {% endblock% },如果改写父模板block是想在原有基础上添加新内容,则可以使用{{ super() }}来继承,{% block 块名%} {{ super() }} 添入的新内容{% endblock%}

 

posted @ 2020-12-30 16:23  eliwang  阅读(203)  评论(0编辑  收藏  举报