(缓缓来迟的下一篇。。。顺便预告,后面会讲如何用Cloudant存储数据啦)
下一步要把静态网站变成动态网站,我们需要用到Flask和Jinja2。Flask是用Python编写网站的框架(Framework )。程序的框架和图中房子的框架的作用一样,都是提供一个基础,让你可以更快捷的实现网站或房子
Jinja2是实现动态网站的模板技术,它可以把Python的代码嵌入到HTML里,就像下面:
Jinja2的语法很奇怪下面解释几种:
-
如果想要显示变量的值,得使用两个大括号({{}})。E.g. {{books[i]['doc']['genre']}}
-
如果想要去一个list的长度,一般都是len(),在括号里面list的名字。但是在Jinja2里,得先写名字,在加一个竖杆 | ,再写length。E.g. books|length
-
如果想要一个for循环,得用{% %},再在中间写for循环。for循环结束后还得加{% endfor %}。E.g. {% for i in range(0, books|length)%}
-
如果想显示一个url,就要用到两个大括号({{}})和url_for方法(第一个参数,bookdetail,是告诉你跳转到bookdetail的链接。后面的参数是多个传入bookdetail的信息。)。E.g. <a rel="nofollow" href="{{ url_for('book_detail', booktitle=books[i]['doc']['title'], bookgenre=books[i]['doc']['genre'], bookauthor=books[i]['doc']['author/ illustrator'], booksummary=books[i]['doc']['summary'], bookrating=books[i]['doc']['rating'], bookrecommendation=books[i]['doc']['recommendation'],
booktrailer=books[i]['doc']['trailer'])}}">{{books[i]['doc']['title']}}</a>
从浏览器访问网页时,根目录/对应着下面图中的index()方法。在index()方法里,return render_template('index.html', books=books)是最重要的,用来显示在Jinja2里定义好的index的template,并且把books list作为参数传到template里。/book_detail这个页面对应book_detail的方法
在命令行里输入以下命令可以运行网站:
-
FLASK_APP=server.py
-
python3 server.py
运行起来的网站是这样
这是电影的网站
网站地址:https://my-favorite-movies.mybluemix.net/