《Flask Web开发》学习(三)——模板(二)

1.Bootstrap

我的理解是,Twitter开发了一个名为Bootstrap的框架,要在flask中使用这个框架,要通过Flask-Bootstrap。这个框架的作用,是使我们的HTML模板可以继承这个框架内部的格式。因此它是一个客户端框架,主要用于网页显示。使用这个框架之前需要在hello.py文件当中进行初始化:

from flask.ext.bootstrap import Bootstrap
#...
bootstrap = Bootstrap(app)    #app是我们的Flask实例,这样做之后我们在app实例中就可以使用bootstrap当中的基模板

基模板的使用仍然和前面模板的继承方式一致:

{% extends "bootstrap/base.html" %}    <!--继承-->

{% block title %}Flasky{% endblock %}    <!--可更改的块-->

......

需要注意的是,如果程序需要向已经有内容的块中添加新内容,必须使用Jinja2提供的super()函数。例如:

{% block scripts %}
{{ super() }}
<script type="text/javascript" src="my-script.js"></scripts>
{% endblock %}

2.自定义错误页面

对于浏览器中输入的不可用路由,需要返回错误页面。最常见的错误代码有两个:404,客户端请求未知页面或路由器时显示;500,有未处理的异常时显示。在hello.py文件中定义这两个响应函数:

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

@app.errorhandler(500)
def internal_server_error(e):
    return render_template('500.html'), 500

其模板仍然使用继承方式:

{% extends "base.html" %}    <!--此时文件夹中有一个base.html文件,这个文件本身也是继承了bootstrap-->

{% block title %}Flasky - Page Not Found{% endblock %}

{% block page_content %}
<div class="page-header">
    <h1>Not Found</h1>
</div>
{% endblock %}

3.链接的理解

先回顾一下路由,路由就是处理用户提交的URL和所需函数之间关系的程序。现阶段我们的hello.py文件中有两个路由,分别链接两个两个页面(index.html和user.html)。如果我们把URL直接写在模板中供用户链接,对于简单的URL,如 index.html 页面的URL,则这样做是可行的。但对于动态路由,其中包含变量,如 user.html 中的 name ,URL写起来就很困难。Flask提供了url_for()辅助函数,以试图函数的名称为参数,使用程序URL映射中保存的信息生成URL。我所不能理解的是,链接的整个实现过程。按我自己的理解,用户输入一个URL,然后路由收到这个URL,这时应该将URL映射为路由视图函数名,从而处理这个URL,而不是把视图函数名映射为URL。希望有小伙伴可以帮我解答这个问题。                                                                             

@app.route('/')
def index():
    return render_template('index.html')


@app.route('/user/<name>')
def user(name):
    return render_template('user.html', name=name)

4.静态文件

通常静态文件也是web的一部分,URL中含有静态文件的请求时,这个请求通过static这个专门处理静态文件映射的路由处理。Flask在程序根目录下的static目录中寻找静态文件。

5.本地化日期和时间

问题来源:web程序可能被世界各地不同时区的使用者使用,因此服务器需要统一时间单位,通常使用协调世界时间UTC,但UTC的格式跟用户当地时间格式不一样,因此要将UTC时间转换为用户当地时间。

解决方案:把UTC时间发送给web浏览器,转换为当地时间,然后渲染(这里应该就是指用当地时间替换UTC时间)。之所以能这么做是因为浏览器可以获取电脑中的时区和区域设置。

渲染工作可以使用一个名为Flask-Moment的Flask扩展程序来实现。

猜你喜欢

转载自blog.csdn.net/theShepherd/article/details/86531107