2017年2月18日14:26:47

开始进入动态生成html数据(即针对用户request的response)环节,必须要使用Template了。依然从阅读文档开始。

Rendering Templates — Flask Documentation (0.12)当中有个例子,根据这个例子我们知道可以往template里面传入参数,那么在接收到用户request时,我们可以首先解析出用户的数据,然后根据用户去查询对应信息,并将它传送给template。

刚尝试在application.py当中import requests,在启动flask的时候遇到如下问题:

(venv) lianbche@5CG44636XG D:\Learning\git\Py103\Chap4\project
> flask run
Usage: flask run [OPTIONS]

Error: The file/path provided (application) does not appear to exist.  Please verify the path is correct.  If app is not on PYTHONPATH, ensure the extension is .py

(venv) lianbche@5CG44636XG D:\Learning\git\Py103\Chap4\project

搜索之下发现这与virtualenv的使用有关。参看之前的requests使用笔记得知requests需要单独安装,于是在venv下使用pip install requests安装requests,便可以成功启动。

给templete传入参数

测试时发现调用render_template()传入参数时提示参数过多的问题,在阅读stackoverflow上一篇问答之后解决。

template支持的编码

上一个问题解决之后,在调用render_template生成html时出现了UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position,搜索之下在stackoverflow另一篇问答中提到:

Jinja2 is using Unicode internally which means that you have to pass Unicode objects to the render function or bytestrings that only consist of ASCII characters.

简而言之,给render_template传入的参数需要是unicode编码的。

template传递字典

现在已经搞定了天气查询,天气查询的返回结果仅仅是一个字符串,但是历史记录则包含了许多内容,可以直接传递吗?答案是可以的,在template文件里面直接使用就行,这个时候模板设计者文档 — Jinja2 2.7 documentation这篇文档就很好了,我是参照了其中的遍历字典示例。

结果演示

1.查询功能

2.帮助信息

3.历史记录

4.异常操作

  • 查询城市为空

  • 无效城市提示

  • 没有历史记录

好吧,到这里,基本功能已经实现。

results matching ""

    No results matching ""