当前位置: 首页 > news >正文

Flask 模板语言

Flask使用的是Jinja2模板引擎

举个例子:

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def index():
    name = "<h1>Hello</h1>"
    return render_template('index.html', name=name)


if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>hello, {{ name }}</h1>
</body>
</html>

模板的变量

在模板中使用的 {{ 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 过滤器值得特别说明一下。默认情况下,出于安全考虑,Jinja2 会转义所有变量。例 如,如果一个变量的值为 '<h1>Hello</h1>',Jinja2 会将其渲染成 '&lt;h1&gt;Hello&lt;/ h1&gt;',浏览器能显示这个 h1 元素,但不会进行解释。很多情况下需要显示变量中存储 的 HTML 代码,这时就可使用 safe 过滤器。
千万别在不可信的值上使用 safe 过滤器,例如用户在表单中输入的文本。

 

if and for

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

 

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

 

模板继承

<html>
<head>
    {% block head %}
    <title>{% block title %}{% endblock %} - My Application</title>
    {% endblock %}
</head>
<body>
{% block body %}
{% endblock %}
</body>
</html>
主板base.html

 

{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
    {{ super() }}
    <style>
    </style>
{% endblock %}
{% block body %}
<h1>Hello, World!</h1>
{% endblock %}
子板

 

 宏?感觉用不到吧

嘿嘿,不写了

 

相关文章:

  • c#.winform,datagridview,数组,绑定,字符串,字符串数组绑定datagridview显示,长度,显示数组内容...
  • 谷歌livereload插件使用
  • 如何划超网
  • linux mono环境
  • GroupBy的用法
  • 直接用postman测试api ,服务器端没提供跨域也可以访问。
  • MySQL中实现分割字符串的方法
  • Tomcat日志问题
  • 日常生活中用的六个加快XP运行方法
  • Struts2.5使用通配符的方式实现动态方法调用报错
  • 异步GridView(ASPxGridView) 特点介绍(1) - 分组(Grouping)、排序(Sorting)、分页(Paging)、列排序...
  • Nginx 之常见报错问题解决
  • 再学 GDI+[66]: 路径画刷(6) - SetInterpolationColors、GetRectangle
  • statspack的IO操作及Buffer Hit Rate
  • Java 网络编程(2):UDP 的使用
  • [译] React v16.8: 含有Hooks的版本
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Asm.js的简单介绍
  • axios 和 cookie 的那些事
  • ECS应用管理最佳实践
  • ES6系列(二)变量的解构赋值
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java到底能干嘛?
  • linux安装openssl、swoole等扩展的具体步骤
  • VUE es6技巧写法(持续更新中~~~)
  • 从零开始的无人驾驶 1
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 如何利用MongoDB打造TOP榜小程序
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 首页查询功能的一次实现过程
  • 智能合约开发环境搭建及Hello World合约
  • 字符串匹配基础上
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 大数据全解:定义、价值及挑战
  • 容器镜像
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • #1015 : KMP算法
  • #162 (Div. 2)
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Ruby)Ubuntu12.04安装Rails环境
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (规划)24届春招和25届暑假实习路线准备规划
  • (四)Controller接口控制器详解(三)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (五)MySQL的备份及恢复
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)大型网站的系统架构
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 表达式计算:Expression Evaluator
  • .NET 服务 ServiceController