前面几篇的内容我们还没涉及视图模板的使用,下面我们简单介绍怎么使用,详细的内容可以参考官方的文档获取更多内容。
官方文档地址:
目录
模板使用
模板继承
HTML自动转义
Flask的模板功能是基于Jinja2模板引擎实现的。提供模板可以使用render_template()方法。
这次我们返回的不再是字符串,而是render_template()方法的返回内容,第一个参数就是模板文件名,第二个参数是模板里面的变量内容,可以有多个变量,它们会在视图渲染的时候按需要显示在页面。
Flask框架会自动查找templates文件夹里面对应的视图文件。
如果应用只是一个模块:文件夹的结构会是这样的:
/application.py
/templates
? /hello.html
如果是一个包,结构会是这样的:
/application
? /__init__.py
? /templates
? /hello.html
下面文章底部会提供一个登陆注册的例子,代码结构是使用蓝图模块化的写法,模板文件我统一放在壳工程的外面,所有模块都共用同一个templates文件夹。
当然也可以使用模块里面的templates文件夹,只需在每个模块初始化Blueprint实例的时候指定文件夹路径就可以了:
main_opt = Blueprint('main_opt', __name__, static_folder="", template_folder="")
蓝图实现模块化会在后面介绍。
?
下面看一下模板文件的写法
hello.html 内容如下:
模板里面可以访问request,session和g实例对象,甚至是get_flashed_messages()函数。
表达式的写法:{{表达式}}
动态代码块写法:
{% if name %}
? <h1>Hello {{ name }}!</h1>
{% else %}
? <h1>Hello, World!</h1>
{% endif %}
如果你要把一个页面通用的内容抽出来,其它页面只要继承它,然后在里面填充不同的内容就可以实现重用。
例如把页头标题栏跟页尾的内容抽出来单独一个文件base.html
base.html 相当于一个页面的框架,只需填入内容。需要插入内容的位置使用block标记
在需要标题栏的页面{% extends 'base.html'%}就可以了,然后填入自己的内容。
自动转义默认是开启的,如果输入的内容包含一些特殊的代码自动转义很容易造成HTML注入攻击。使用Markup类可以避免自动转义处理。
下面是一个在返回字符串的转义例子
页面会输出”Hello Flask”字样,而且”Flask”是斜体的,因为我们加了<em>标签。
如果不想自动转义可以这样写:
现在页面只会显示”Hello <em>Flask</em>”
如果您觉得本文的内容对您的学习有所帮助:
关键字:
jquery