本文概述
在前面的示例中, 我们返回了简单字符串作为view函数的响应。虽然, flask帮助我们以HTML模板的形式返回响应。在本教程的这一部分中, 我们将介绍从Web应用程序返回HTML响应的方法。
例子
下面的flask脚本包含一个视图函数, 即与URL’/’相关联的message()。与其返回简单的纯字符串作为消息, 不如使用HTML返回一条带有<h1>标签的消息。
script.py
from flask import *
app = Flask(__name__)
@app.route('/')
def message():
return "<html><body><h1>Hi, welcome to the website</h1></body></html>"
if __name__ == '__main__':
app.run(debug = True)
渲染外部HTML文件
Flask帮助我们呈现外部HTML文件, 而不是在视图函数中对HTML进行硬编码。在这里, 我们可以利用Python Flask所基于的jinja2模板引擎。
Flask为我们提供了render_template()函数, 该函数可用于呈现外部HTML文件, 以作为来自视图函数的响应返回。
考虑以下示例。
例子
要从视图功能渲染HTML文件, 首先让我们创建一个名为message.html的HTML文件。
message.html
<html>
<head>
<title>Message</title>
</head>
<body>
<h1>hi, welcome to the website </h1>
</body>
</html>
script.py
from flask import *
app = Flask(__name__)
@app.route('/')
def message():
return render_template('message.html')
if __name__ == '__main__':
app.run(debug = True)
在这里, 我们必须在应用程序目录中创建文件夹模板, 并将Python Flask脚本中引用的HTML模板保存在该目录中。
在我们的示例中, 脚本文件script.py的路径为E:\ flask, 而HTML模板的路径为E:\ flask \ templates。
应用目录
- script.py
- 范本
- message.html
定界符
Jinga 2模板引擎提供了一些定界符, 可在HTML中使用这些定界符以使其能够动态表示数据。模板系统提供了一些HTML语法, 这些语法是变量和表达式的占位符, 在呈现模板时将其替换为它们的实际值。
jinga2模板引擎提供以下定界符以从HTML中转义。
- {%…%}用于声明
- {{…}}用于将表达式打印到模板输出
- {#…#}用于模板输出中未包含的注释
- #… ##用于行语句
例子
考虑以下示例, 其中使用{{…}}分隔符在HTML脚本中显示URL的可变部分。
message.html
<html>
<head>
<title>Message</title>
</head>
<body>
<h1>hi, {{ name }}</h1>
</body>
</html>
script.py
from flask import *
app = Flask(__name__)
@app.route('/user/<uname>')
def message(uname):
return render_template('message.html', name=uname)
if __name__ == '__main__':
app.run(debug = True)
URL http:// localhost:5000 / user / admin的可变部分在HTML脚本中使用{{name}}占位符显示。
在HTML中嵌入Python语句
由于HTML是一种标记语言, 并且仅用于设计目的, 因此有时在Web应用程序中, 我们可能需要执行用于通用计算的语句。为此, Flask为我们简化了定界符{%…%}, 该定界符可用于将简单的python语句嵌入HTML。
例子
在以下示例中, 我们将打印URL中指定的数字表, 即URL http:// localhost:5000 / table / 10将在浏览器窗口中打印10的表。
在这里, 我们必须注意, for循环语句包含在{%…%}分隔符内, 而循环变量和数字包含在{{…}}占位符内。
script.py
from flask import *
app = Flask(__name__)
@app.route('/table/<int:num>')
def table(num):
return render_template('print-table.html', n=num)
if __name__ == '__main__':
app.run(debug = True)
print-table.py
<html>
<head>
<title>print table</title>
</head>
<body>
<h2> printing table of {{n}}</h2>
{% for i in range(1, 11): %}
<h3>{{n}} X {{i}} = {{n * i}} </h3>
{% endfor %}
</body>
</html>
在HTML中引用静态文件
诸如CSS或JavaScript文件之类的静态文件可增强HTML网页的显示。 Web服务器被配置为从包中或模块旁边的静态文件夹中提供此类文件。静态文件位于应用程序的路径/ static处。
例子
在以下示例中, flask脚本返回HTML文件, 即message.html, 该文件使用样式表style.css设置样式。 flask模板系统在static / css目录下找到静态CSS文件。因此, style.css将保存在指定路径中。
script.py
from flask import *
app = Flask(__name__)
@app.route('/')
def message():
return render_template('message.html')
if __name__ == '__main__':
app.run(debug = True)
message.html
<html>
<head>
<title>Message</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
<h1>hi, welcome to the website</h1>
</body>
</html>
style.css
body {
background-color: powderblue;
}
h1 {
color: blue;
}
p {
color: red;
}
评论前必须登录!
注册