(缓缓来迟的下一篇。。。顺便预告,后面会讲如何用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/