第三章:模板

模板

视图函数的作用:生成请求的响应

业务逻辑、表现逻辑
把表现逻辑移到模板中能够提升程序的可维护性。

模板是一个包含响应文本的文件,包含用占位变量表示的动态部分,具体指爱请求的上下文才知道。
使用真实值替代变量,再返回最终得到的响应字符串,这一过程称为 渲染

Jinja2模板引擎

Flask在程序文件夹的templates子文件夹中寻找模板,
render_template函数把Jinja2模板引擎集成到了程序中,第一个参数为模板文件名,随后参数都是键对值,表示模板中变量对应的真实值。

Jinja2能识别所有类型的变量,可以使用过滤器修改变量,下面模板以首字母大写形式显示变量name的值

Hello, {{ name|capitalize }}

safe 渲染值时不转义

capitalize 首字母大写

lower 小写

upper 大写

title 每个单词首字母大写

trim 首尾空格去掉

striptags 渲染之前把值中所有的HTML标签都删掉。


出于安全考虑,Jinja2会转义所有变量。千万别在不可信的值上使用safe过滤器,例如用户在表单中输入的文本

条件控制语句:

{% if user %}
    Hello, {{ user }}!
{% else %}
    Hello, Stranger!
{% endif %}

渲染一组元素:

<ul>
    {% for comment in comments %}
        <li>{{ comment }}</li>
    {% endfor %}
</ul>

Jinja2还支持宏:

{% macro render_comment(comment) %}
    <li>{{ comment }}</li>
{% endmacro %}

<ul>
    {% for comment in comments %}
        {{ render_comment(comment) }}
    {% endfor %}
</ul>

需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复。

{% include 'comment.html' %}

另一种重复使用代码的方式是 模板继承
block标签定义的元素可在衍生模板中修改。

Bootstrap

Boostrap是一个 Twitter 开发的一个开源框架,它提供的用户界面组件可用于创建整洁且具有吸引力的网页。

它是客户端框架,不会涉及到服务器。服务器要做的是提供引用了Bootstrap层叠样式表和JavaScript文件的HTML响应,并在HTML、CSS和JavaScript代码中实例化所需组件。这些操作最理想的执行场所就是模板。
Flask-Bootstrap,简化集成的过程。
Flask扩展一般都在创建程序实例时初始化。

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

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

链接

任何具有多个路由的程序都需要可以连接不同页面的链接,例如导航条。
Flask提供了url_for()辅助函数,它可以使用程序URL映射中保存的信息生成URL。
url_for()函数最简单的用法是以视图函数名作为参数,返回对应的URL。

使用url_for()生成动态地址时,将动态部分作为关键字参数传入。

静态文件

默认设置下,Flask在程序跟目录中名为static的自目录中寻找静态文件。

Flask-Moment本地化日期和时间

服务器需要统一时间单位,这和用户所在的地理位置无关,所以一般使用协调时间时(Coordinated Universal Time, UTC)。

要想在服务器上只使用UTC时间,把时间单位发送给Web浏览器,转换成当地时间,然后渲染。

有一个使用JavaScript开发的优秀客户端开源代码库,名为 moment.js,它 可以在浏览器中渲染日期和时间。 Flask-Moment 可以把moment.js集成到Jinja2模板中。
Flask-Moment还依赖jquery.js.

posted @ 2017-03-30 09:15  Cheko  阅读(185)  评论(0编辑  收藏  举报