《Flask Web开发》学习(三)——模板(一)

1.从视图函数说起

视图函数就是用来生成请求的响应。这个响应过程分为业务逻辑表现逻辑业务逻辑简单理解就是对用户请求的处理,表现逻辑简单理解就是把处理结果回送给浏览器。

2.为什么需要模板

模板就是一个包含响应文本的文件。从字面意思理解就是它里面包含视图函数功能的代码,同时内部结构具有一定的规范性。有了模板我们可以把表现逻辑移到模板中,这样可以提升程序的可维护性。

3.渲染模板

使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。Jinja2模板引擎是为了能够渲染模板而存在的。

from flask import Flask, render_template    #Flask提供的render_template函数把Jinja2集成到程序中

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')    #index.html是模板文件名

@app.route('/user/<name>')
def user(name):
    return render_template('user.html', name=name)  #user.html是模板文件名,name=name是键值对,左边是参数名,右边是值

4.变量

<h1>Hello,{{ name }}!</h1> <!--模板中使用{{ name }}表示一个变量,告诉模板引擎这个位置的值从渲染模板时使用的数据中获取-->

Jinja2能识别所有类型的变量,包括字典{{ mydict['key'] }}、列表{{ mylist[3] }}、下标为变量的列表{{ mydict[index] }}、

对象{{ myobj.somemethod() }}。

当我们对变量的格式有特定要求时,我们可以通过过滤器来修改变量。我对过滤器的理解类似于滤镜,白光通过特定颜色的滤镜最终显示为和滤镜同色的颜色。当变量经过特定过滤器修改后,它的格式符合这种过滤器的格式。

Hello, {{ name|capitalize }}    <!--过滤器使用格式,该例中以首字母大写形式显示变量name-->

5.控制结构

当我们在用模板返回响应时,我们要根据请求包涵的条件,返回相应内容。因此模板本身就要对所要返回的内容进行控制。

{% if user %}    <!--条件控制语句-->
    Hello,{{ user }}!
{% else %}
    Hello,stranger!
{% endif %}    <!--控制语句有结束语-->
<!----------------------------------------分隔线------------------------------------------->
<ul>    <!--for循环语句-->
    {% fot comment in comments %}
        <li>{{ comment }}</li>
    {% endfor %}
</ul>    <!--可以看出控制语句都在{% *** %}里-->
<!----------------------------------------分隔线------------------------------------------->
{% macro render_comment(comment) %}    <!--定义一个宏,其作用是对comment进行处理-->
    <li>{{ comment }}</li>
{% endmacro %}

<ul>
    {% for comment in comments %}    <!--调用上面那个宏,实现对comment的处理-->
        {{ render_comment(comment)}}
    {% endfor %}
</ul>
<!----------------------------------------分隔线------------------------------------------->
{% import 'macros.html' as macros %}    <!--把宏单独写在一个文件里,对其重复使用-->
<ul>
    {% for comment in comments %}    
        {{ macros.render_comment(comment)}}    <!--宏跟for语句不在一个文件中的写法-->
    {% endfor %}
</ul>

6.模板继承

模板继承是一种重复使用代码的方法。首先要有一个基模板,继承这个基模板的模板称为衍生模板。

<!--基模板-->
<html>
<head>
    {% block head %}    <!--block标签定义的元素可在衍生模板中修改-->
    <title>{% block title %}{% endblock %} - My Application</title>
    {% endblock %}
</head>
<body>
    {% block body %}
    {% endblock %}
</body>
</html>
<!--衍生模板-->
{% extends "base.html" %}
{% block title %}Index{% endblock %}    <!--替换的内容-->
{% block head %}
    {{ super() }}
    <style>
    </style>
{% endblock %}
{% block body %}
<h1>Hello,World!</h1>    <!--替换的内容只要用block体标识出来即可-->
{% endblock %}

猜你喜欢

转载自blog.csdn.net/theShepherd/article/details/86512609