继续学习flask

本部分Miguel Grinberg教程的翻译地址:http://www.pythondoc.com/flask-mega-tutorial/templates.html

英文原文地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ii-templates

一、为什么使用模板?

以下做一个小小的扩展:输出一个大标题。

一个容易的选择就是改变我们的视图功能,输出 HTML。

修改app/views.py

 from app import app

 @app.route('/')
@app.route('/index')
def index():
user = { 'nickname': 'Miguel'} # fake user
return '''
<html>
<head>
<title>Home Page</title>
</head>
<body>
<h1>hello,''' + user['nickname'] + '''</h1>
</body>
</html>
'''

网页浏览器上的显示情况:

aaarticlea/png;base64,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" alt="" />

以下是教程原话:

我们暂时还不支持用户,所以暂时使用占位符的用户对象,有时也被称为假冒或模仿的对象。这样让我们可以集中关注应用程序的某一方面,而不用花心思在暂未完成的部分上。

我希望你同意我的说法,上面的解决方案是非常难看!如果我们需要返回一个含有大量动态内容的大型以及复杂的 HTML 页面的话,代码将会有多么复杂啊!如果你需要改变你的网站布局,在一个大的应用程序,该应用程序有几十个视图,每一个直接返回HTML?这显然​​不是一 个可扩展的选择。

二、初步使用模板

就是把前端和后端的分离。

文件 app/templates/index.html

 <html>
<head>
<title>{{title}} - microblog</title>
</head>
<body>
<h1>Hello, {{user.nickname}}!</h1>
</body>
</html>

注意一下index.html的位置

我们只是写了一个大部分标准的HTML页面,唯一的区别是有一些动态内容的在 {{ ... }} 中。

然后在视图函数(文件 app/views.py)中使用这些模板,修改 app/views.py 内容:

 from app import app
from flask import render_template @app.route('/')
@app.route('/index')
def index():
user = { 'nickname': 'Miguel'} # fake user
return render_template("index.html",
title = 'Home',
user = user)

为了渲染模板,我们必须从 Flask 框架中导入一个名为 render_template 的新函数。此函数需要传入模板名以及一些模板变量列表,返回一个所有变量被替换的渲染的模板。

在内部,render_template 调用了 Jinja2 模板引擎,Jinja2 模板引擎是 Flask 框架的一部分。Jinja2 会把模板参数提供的相应的值替换了 {{...}} 块。

运行后的浏览器页面可以看到是和之前一样的。

关于模板中的控制和循环语句和其他语言没什么差别,很容易理解。

三、模板继承

我们知道多数网站都有导航栏,而同一个网站的导航栏都是一样的。在每个模板中复制粘贴同样的代码是很浪费时间,而且修改起来也很麻烦(修改一个部分就要把它的拷贝全部修改)。

教程原话:我们可以利用 Jinja2 的模板继承的特点,这允许我们把所有模板公共的部分移除出页面的布局,接着把它们放在一个基础模板中,所有使用它的模板可以导入该基础模板。

定义一个基础模板,该模板包含导航栏以及上面谈论的标题(文件 app/templates/base.html):

<html>
<head>
{% if title %}
<title>{{title}} - microblog</title>
{% else %}
<title>microblog</title>
{% endif %}
</head>
<body>
<div>Microblog: <a href="/index">Home</a></div>
<hr>
{% block content %}{% endblock %}
</body>
</html>

在这个模板中,我们使用 block 控制语句来定义派生模板可以插入的地方。块被赋予唯一的名字content。

然后修改我们的 index.html 模板继承自 base.html (文件 app/templates/index.html):

{% extends "base.html" %}
{% block content %}
<h1>Hi, {{user.nickname}}!</h1>
{% for post in posts %}
<div><p>{{post.author.nickname}} says: <b>{{post.body}}</b></p></div>
{% endfor %}
{% endblock %}

这样的话,之后如果要修改导航栏只需要修改一个地方就可以了。

Flask学习之二 模板的更多相关文章

  1. Python Flask学习笔记之模板

    Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...

  2. Flask 学习篇二:学习Flask过程中的记录

    Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Application and Request Context ...

  3. flask学习(九):模板渲染和参数传递

    一. 如何渲染模板 1. 模板放在templates文件夹下 2. 从flask中导入render_template函数 3. 在视图函数中,使用render_template函数,渲染模板 注意:只 ...

  4. Flask 学习(二)jinja2模板介绍

    控制语句和表达式 举例 Flask Python代码 from flask import Flask, render_template, redirect, request app = Flask(_ ...

  5. flask学习(二)

    一.蓝图 作用:给开发者提供目录结构 功能:1.自定义模板.静态文件目录 2.给一类url加前缀    3.给一类url添加before_request 目录结构 from flask_werkzur ...

  6. Flask 学习(二)路由

    Flask  路由 在说明什么是 Flask 路由之前,详细阐述下 Flask “Hello World” 这一 最小应用的代码. Flask “Hello World” from flask imp ...

  7. Flask 学习 十二 用户评论

    评论在数据库中的表示 由于评论和2个模型有关系,分别是谁发了评论,以及评论了哪个文章,所以这次要更新数据库模型 models.py 创建用户评论数据库模型 class Comment(db.Model ...

  8. flask学习(十二):for循环遍历

    一. 字典的遍历 语法和python一样,可以使用items().keys().values().iteritems().iterkeys().itervalues() {% for k, v in ...

  9. flask学习(十):模板中访问模型和字典的属性

    访问模型中的属性或者是字典,可以通过{{params.property}}的形式,或者是使用{{params['age']}}这样的形式

随机推荐

  1. 使用setTimeout函数解决栈溢出问题

    下面的代码,如果队列太长会导致栈溢出,怎样解决这个问题并且依然保持循环部分: var list = readHugeList(); var nextListItem = function() { va ...

  2. python 字符串的处理技巧--join

    >>> '+'.join('1234')'1+2+3+4'>>> '+'.join(a for a in '1234')'1+2+3+4'>>> ...

  3. 索尼微单cmos坏点屏蔽

    偶然发现相机有坏点了,果断去售后换了一台回来.然后试机,吐血 要不是我旧机器满是岁月的痕迹,我真以为原封给我退回来了 这样不行啊,难道再换一个回来?毕竟是脸皮薄的人.不好意思操作啊. 于是上网找找,果 ...

  4. List的深度序列化Demo

    今天项目中出现了这个问题...就是使用一个List去进行其他的操作,生成一个新的List.但是却将原来的List的值也给改了...这应该是引用传递的问题,查了资料发现这是浅拷贝造成的.(ps:使用ad ...

  5. Struts_添加客户练习

    1.修改CustomerAction,实现ModelDriven接口 2.修改配置文件 3.修改表单提交地址

  6. cf round 480E The Number Games

    题意:给一棵树,点$i$的点权是$2^i$,你需要删掉$k$个点,使得剩下的点连通的情况下剩下的点权值和最大. $k \leq n \leq 10^6$ 如果考虑删哪些点,是不好考虑的,会出问题. 反 ...

  7. python中在计算机视觉中的库及基础用法

    基于python脚本语开发的数字图像处理包有很多,常见的比如PIL.Pillow.opencv.scikit-image等.PIL和pillow只提供了基础的数字图像处理,功能有限:OpenCV实际上 ...

  8. Vue--通过button跳转到其他组件并携带id参数

    一.创建vue文件 ’ <template> <div> goodsCommon<br/> goodsCommon<br/> goodsCommon&l ...

  9. javascript中uber实现子类访问父类成员

    function Animal(){} Animal.prototype={ name:"animal", toString:function(){ console.log(thi ...

  10. WPF数据绑定详解

    元素绑定 数据绑定最简单的形式是,源对象是WPF元素而且源属性是依赖属性.依赖项属性具有内置的更改通知支持,当在源对象中改变依赖项属性的值时,会立即更新目标对相中的绑定属性. <!--Xaml程 ...