框架

《Flask Web开发》 读书笔记

2019-02-26  本文已影响23人  fat___lin

github随书demo

Flask 中有两种上下文:程序上下文和请求上下文

变量名 上下文 说 明
current_app 程序上下文 当前激活程序的程序实例
g 程序上下文 处理请求时用作临时存储的对象。每次请求都会重设这个变量
request 请求上下文 请求对象,封装了客户端发出的 HTTP 请求中的内容
session 请求上下文 用户会话,用于存储请求之间需要“记住”的值的词典

jinjia2 模板

官方文档

渲染模板

默认情况下,Flask 在程序文件夹中的 templates 子文件夹中寻找模板。

from flask import Flask, render_template 
# ...
@app.route('/')
def index():
  return render_template('index.html')
@app.route('/user/<name>')
def user(name):
  return render_template('user.html', name=name)

变量

模板中使用的 {{ name }} 结构表示一个变量,它是一种特殊的占位符,告诉模
板引擎这个位置的值从渲染模板时使用的数据中获取。
Jinja2 能识别所有类型的变量,甚至是一些复杂的类型,例如列表、字典和对象。在模板 中使用变量的一些示例如下:

<p>A value from a dictionary: {{ mydict['key'] }}.</p>
<p>A value from a list: {{ mylist[3] }}.</p>
<p>A value from a list, with a variable index: {{ mylist[myintvar] }}.</p>
<p>A value from an object's method: {{ myobj.somemethod() }}.</p>

可以使用过滤器修改变量,过滤器名添加在变量名之后,中间使用竖线分隔。

Hello, {{ name|capitalize }}
过滤器名 说 明
safe 渲染值时不转义
capitalize 把值的首字母转换成大写,其他字母转换成小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 把值中每个单词的首字母都转换成大写
trim 把值的首尾空格去掉
striptags 渲染之前把值中所有的 HTML 标签都删掉

控制结构

Jinja2 提供了多种控制结构,可用来改变模板的渲染流程。

{% if user %}
  Hello, {{ user }}!
{% else %}
  Hello, Stranger!
{% endif %}
<ul>
  {% for comment in comments %}
    <li>{{ comment }}</li> 
  {% endfor %}
</ul>
{% macro render_comment(comment) %} 
  <li>{{ comment }}</li>
{% endmacro %}
<ul>
  {% for comment in comments %}
    {{ render_comment(comment) }}
  {% endfor %}
</ul>
{% import 'macros.html' as macros %}
<ul>
  {% for comment in comments %}
    {{ macros.render_comment(comment) }}
  {% endfor %} 
</ul>
上一篇下一篇

猜你喜欢

热点阅读