资讯专栏INFORMATION COLUMN

[译]Flask教程-模版

jifei / 1676人阅读

摘要:我们可以让绑定到某个的函数返回比如下面的代码中函数会返回由包裹的字符串但大家看得出这样直接通过代码返回内容显得很笨尤其当我们碰到需要对输入变量做条件判断和循环时我们经常需要做字符串嵌入拼接这种体力活这种情况下我们需要利用自带的模版引擎我们可

我们可以让绑定到某个URL的函数返回HTML. 比如下面的代码中, hello()函数会返回由

包裹的Hello World字符串.

from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
   return "

Hello World"

" if __name__ == "__main__": app.run(debug = True)

但大家看得出, 这样直接通过python代码返回HTML内容显得很笨, 尤其当我们碰到需要对输入变量做条件判断和循环时, 我们经常需要做字符串嵌入拼接这种体力活.
这种情况下, 我们需要利用Flask自带的Jinja2模版引擎. 我们可以通过render_template()来渲染HTML文件, 而不是直接把HTML直接硬编码在python代码中. 比如:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
   return render_template(‘hello.html’)

if __name__ == "__main__":
   app.run(debug = True)

Flask会默认尝试从脚本执行目录下的templates文件夹中寻找HTML模版文件,

--脚本目录
 |_ Hello.py
 |_ templates
    |_hello.html

"web模版系统" 是指一个变量部分可以被动态替换的HTML代码的系统. web模版系统包含一个模版引擎, 一种数据源, 和一个模版处理工具.
Flask使用Jinja2模版引擎, web模版包含有按HTML语法书写的脚本和由变量或表达式构成的动态内容的占位符. 这些占位符会在模版渲染时被替换成需要展示的动态内容.
我们可以把如下内容保存为hello.html:



   
      

Hello {{ name }}!

然后运行下面的Python代码:

from flask import Flask, render_template
app = Flask(__name__)

@app.route("/hello/")
def hello_name(user):
   return render_template("hello.html", name = user)

if __name__ == "__main__":
   app.run(debug = True)

服务器在开发模式下开始运行之后, 我们打开浏览器在地址栏输入 http://localhost:5000/hello/mvl.
我们可以看到在模版的{{ name }} 部分, 替换成了变量mvl.
Jinja2使用如下的占位符语法:

{% ... %} 声明

{{ ... }} 用于表达式直接把结果输出

{# ... #} 用于注释, 将不会在模版引擎渲染结果中输出

# ... ## 行注释

下面的例子展示了模版中条件语句的使用.
hello_name()方法接收一个整型参数, 传递给hello.html模版, 其中, masks变量接受到了这个整型变量, 并进行判断比较, 是否大于50, 然后进行不同的渲染.

Python程序如下:

from flask import Flask, render_template
app = Flask(__name__)

@app.route("/hello/")
def hello_name(score):
   return render_template("hello.html", marks = score)

if __name__ == "__main__":
   app.run(debug = True)

模版hello.html如下:



   
   
      {% if marks>50 %}
      

Your result is pass!

{% else %}

Your result is fail

{% endif %}

注意, if-else和endif语句被包裹在{%..%}之中.
启动脚本并分别在浏览器输入http://localhost/hello/60http://localhost/hello/30, 观察模版不同的渲染结果.

Python中的循环语法也可以在模版中实现. 下面的程序中, 当请求 http://localhost:5000/result 时, result()方法就向模版result.html发送了一个字典对象用于渲染. 然后result.html使用for循环把字典result的键值对渲染到html表格中.

Python程序如下:

from flask import Flask, render_template
app = Flask(__name__)

@app.route("/result")
def result():
   dict = {"phy":50,"che":60,"maths":70}
   return render_template("result.html", result = dict)

if __name__ == "__main__":
   app.run(debug = True)

把下面result.html模版文件保存到默认templates模版文件夹中.



   
   
      
         {% for key, value in result.iteritems() %}
         
            
            
         {% endfor %}
      
{{ key }} {{ value }}

这里, for循环声明语句被用{%..%}包裹了起来, 键值对取值的部分被用{{ }}包裹.
程序开始执行后, 我们可以打开浏览器, 看看 http://localhost:5000/result的输出.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40886.html

相关文章

  • []Flask教程--重定向与错误

    摘要:类有一个方法当我们调用它时它会返回一个响应对象并且按指定的状态码将用户重定向到另一个位置方法的原型如下在上面的函数中我们要重定向的位置状态码会在头中发送给浏览器默认为用这个参数来初始化响应对象下面是一些标准的状态码重定向的状态码默认是也就是 Flask类有一个redirect()方法. 当我们调用它时, 它会返回一个响应对象并且按指定的状态码将用户重定向到另一个位置. redirect...

    leap_frog 评论0 收藏0
  • []Flask教程--静态文件

    摘要:一个应用经常需要或之类的静态文件来帮助网页更好的展示内容通常服务器被用来提供这种静态文件服务但在程序的开发阶段这些文件需要被放置在应用根目录下的文件夹中启动后使用时前缀以开头在下面的例子中文件中定义了一个函数这个函数在中可以被一个按钮的事件 一个web应用经常需要javascript或css之类的静态文件来帮助网页更好的展示内容. 通常, web服务器被用来提供这种静态文件服务, 但在...

    sf190404 评论0 收藏0
  • []Flask教程--将表单数据发送到模板

    摘要:之前我们已经看到在中我们可以给规则指定方法对应的函数可以按字典形式接收表单数据然后将这些数据输送到模板中并最终渲染为网页在下面的例子中渲染一个含有表单的网页填入到表单的数据被到然后触发了函数函数将表单数据组装起来放入字典对象中然后发送到模板 之前我们已经看到在Flask中我们可以给URL规则指定http方法, 对应的函数可以按字典形式接收表单数据, 然后将这些数据输送到模板中并最终渲染...

    you_De 评论0 收藏0
  • []Flask教程-HTTP方法

    摘要:协议是万维网数据通信的基础在这个协议上可以对同一使用不同的方法获取数据下面展示了几种不同的方法将未经加密的信息发送的服务器是最通用的方法该方法除了服务端不返回响应内容只返回头信息之外同是一样的用于向服务器发送表单数据请求不会被缓存将所指示的 HTTP协议是万维网数据通信的基础. 在这个协议上可以对同一URL使用不同的方法获取数据.下面展示了几种不同的HTTP方法. GET 将未经加...

    anonymoussf 评论0 收藏0
  • []如何使用Flask开发一个增删改查的应用

    摘要:教程译文首发自我的博客我们将创建一个简单的数据库驱动的笔记本应用。本教程面向想学习如何使用开发网站或者应用的初学者。在刚创建的文件中,创建一个名为的文件。现在,我们将创建一个函数,并且使用装饰器将它绑定到一个上。 showImg(https://segmentfault.com/img/remote/1460000006765797); 教程译文首发自我的博客:Defshines Bl...

    tianlai 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<