Python Flask Web框架(四)
2017-02-17 15:19
453 查看
一、静态文件
动态的 web 应用同样需要静态文件。CSS和
JavaScript文件通常来源于此。理想情况下,
你的 web 服务器已经配置好为它们服务,然而在开发过程中 Flask 就能够做到。 只要在你的包中或模块旁边创建一个名为
static的文件夹,在应用中使用
/static即可访问。
给静态文件生成 URL ,使用特殊的
static端点名:
url_for('static', filename='style.css')
这个文件是应该存储在文件系统上的
static/style.css。
二、渲染模板
在 Python 中生成 HTML 并不好玩,实际上是相当繁琐的,因为你必须自行做好HTML转义以保持应用程序的安全。 由于这个原因,Flask 自动为你配置好 Jinja2 模版。你可以使用方法
render_template()来渲染模版。所有你需要做的就是提供模版的名称以及你想要作为关键字参数传入模板的变量。这里有个渲染模版的简单例子,
修改
hello.py文件:
from flask import render_template @app.route('/hello/') @app.route('/hello/<name>') def hello(name=None): return render_template('hello.html', name=name)
Flask 将会在
templates文件夹中寻找模版。因此如果你的应用是个模块,这个文件夹在模块的旁边,如果它是一个包,那么这个文件夹在你的包里面:
Case 1:应用是模块(本系列实验的应用结构都是模块型):
/application.py /templates /hello.html
Case 2: 应用是包:
/application /__init__.py /templates /hello.html
对于模板,你可以使用 Jinja2 模板的全部能力。详细信息查看官方的 Jinja2 Template Documentation 。
这里是一个模版的例子,在这之前需要建立文件结构如下图所示:
然后编写
hello.html模板文件:
<!doctype html> <title>Hello from Flask</title> {% if name %} <h1>Hello {{ name }}!</h1> {% else %} <h1>Hello World!</h1> {% endif %}
效果如下(这里建议在图形界面下开启两个终端,一个用来启动服务器,一个用来编写代码):
在模版中你也可以使用request,session和g对象,也能使用函数get_flashed_messages() 。
模版继承是十分有用的。如果想要知道模版继承如何工作的话,请阅读文档模板继承。基本的模版继承使得某些特定元素(如标题,导航和页脚)在每一页成为可能。
自动转义默认是开启的,因此如
name包含 HTML,它将会自动转义。如果你信任一个变量,并且你知道它是安全的(例如一个模块把 wiki
标记转换到 HTML ),你可以用
Markup类或
|safe过滤器在模板中标记它是安全的。
在 Jinja 2 文档中,你会见到更多例子。
下面一个
Markup类如何工作的基本介绍:
$ python >>> from flask import Markup >>> Markup('<strong>Hello %s!</strong>') % '<blink>hacker</blink>' Markup(u'<strong>Hello <blink>hacker</blink>!</strong>') >>> Markup.escape('<blink>hacker</blink>') Markup(u'<blink>hacker</blink>') >>> Markup('<em>Marked up</em> » HTML').striptags() u'Marked up \xbb HTML'
注意:在后面的0.5版本以上:
自动转义不再在所有模版中启用。模板中下列后缀的文件会触发自动转义:
.html, .htm, .xml,.xhtml。从字符串加载的模板会禁用自动转义。
三、小结
本节讲了 flask 的静态文件和模板的基本知识,静态文件放在 static目录中,模板文件放在
templates目录下。
四、练习
请创建一个模板和CSS文件,并在模板引入
CSS文件,显示一个绿色的
Hello ShiYanLou字样。关于
HTML以及
CSS的学习请参考在线教程
相关文章推荐
- 在python的WEB框架Flask中使用多个配置文件的解决方法
- Python Web框架Flask信号机制(signals)介绍
- python flask web框架简明教程
- python常用web框架性能测试(django,flask,bottle,tornado)
- 基于Flask框架的Python web程序的开发实战 <二> 项目组织结构
- python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
- Python Web框架Flask中使用百度云存储BCS实例
- Python的Flask框架中web表单的教程
- Python Web框架Flask中使用新浪SAE云存储实例
- Ubuntu下使用Python+flask+MySQL的架构搭建Web框架
- Python Webk框架学习 Flask
- Python Web框架Flask下网站开发入门实例
- python - web框架 - Flask 参考内容
- Python微型web开发框架flask介绍及一个小例子
- Ubuntu下使用Python+flask+MySQL的架构搭建Web框架
- Django vs Flask vs Pyramid: 如何去选择一个Python Web框架
- python - web框架 - Flask Mysql 创建表的外键
- python常用web框架性能测试(django,flask,bottle,tornado)
- [Link]选择一个 Python Web 框架:Django vs Flask vs Pyramid
- 基于Flask框架的Python web程序的开发实战 <一> 环境搭建