flask第十八篇——模板【2】
请关注公众号:自动化测试实战
上一节我们介绍了模板的基本使用方法,现在我们想一个问题,如果把index.html放到template文件夹下面的文件夹该怎么办呢?其实很容易,当文件夹结构如下图所示时:
我们只需要修改render_template的值即可,代码如下:
如果你在pycharm里面修改,pycharm会自动帮你改应用的代码的。
现在来想另一个问题,就是既然模板可以复用,那么它里面的内容肯定不可能写死对吧,如果写成固定值那每个页面的内容都成了一样的了,所以模板就需要写成变量的形式,通过给变量传值来修改模板对应的内容。在flask中,变量的写法是{{ 变量值 }}这种两个大括号(又叫大胡须)的形式。
现在我们在主文件给一段字符串,然后想把它应用到.html模板中,我们该怎门办呢?根据render_template的源码知道它还有第二个参数——关键字参数**context,所以我们知道只需要给它传一个关键字参数即可,加上刚才的大胡须传递变量,我们来看一段代码:
templateDemo.py文件
# coding: utf-8
from flask import Flask, render_template
app = Flask(__name__) # type: Flask
app.debug = True
@app.route('/')
def hello_world():
title = u'首页内容'
return render_template('post/index.html', title=title)
if __name__ == '__main__':
app.run()
index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这里是title</title>
</head>
<body>
<h1>{{ title }}</h1>
</body>
</html>
现在来执行代码,然后去页面查看:
我们看到title的内容已经在页面上显示出来了。
这是模板引用变量的最简单的一个例子。
现在我们来渲染一个字典(就是传值为字典,专业术语叫渲染,记住了):
# coding: utf-8
from flask import Flask, render_template
app = Flask(__name__) # type: Flask
app.debug = True
@app.route('/')
def hello_world():
title = {"name": "Warren",
"age": 18,
"gender": "male"}
return render_template('post/index.html', title=title)
if __name__ == '__main__':
app.run()
执行代码后看到页面直接显示了字典title的内容:
如果我们现在只想取字典里name的值呢?那么我只需要修改index.html里面的内容即可:index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这里是title</title>
</head>
<body>
<h1>{{ title.name }}</h1>
</body>
</html>
可以看到,取值的方式就是title.name即可。
请关注公众号:自动化测试实战
flask第十八篇——模板【2】的更多相关文章
- flask第二十二篇——模板【4】过滤器
请关注微信公众号:自动化测试实战 先来教大家一个pycharm设置默认模板的方法.我们每次新建模板或者平时写代码打开以后可能都要重复写# coding: utf-8这些代码,其实我们可以设置好模板,让 ...
- flask第十九篇——模板【3】
请关注微信公众号:自动化测试实战 今天我们继续模板的知识,现在我们增加字典的复杂度,这个时候在render_template第二个参数可以传**title,以后我们会用**context代替原来的ti ...
- flask第二十六篇——模板【控制语句】【2】
如果你也在学flask,就请加船长的公众号:自动化测试实战 我们先补充一下for循环的知识,我们之前说过,flask是由Jinja2+sqlAlchemy+werkzeug组成的,我们现在学的控制语句 ...
- flask第二十四篇——模板【6】自定义过滤器
请关注孟船长的公众号:自动化测试实战 大家想了解其他过滤器可以参考这里: http://jinja.pocoo.org/docs/dev/templates/#builtin-filters ---- ...
- flask第二十八篇——HTML【1】table标签
请关注公众号:自动化测试实战 以下内容参考:http://www.w3school.com.cn/tags/tag_table.asp <!DOCTYPE html> <html l ...
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
- Egret入门学习日记 --- 第十八篇(书中 8.5~8.7 节 内容)
第十八篇(书中 8.5~8.7 节 内容) 其实语法篇,我感觉没必要写录入到日记里. 我也犹豫了好久,到底要不要录入. 这样,我先读一遍语法篇的所有内容,我觉得值得留下的,我就录入日记里. 不然像昨天 ...
- Android UI开发第二十八篇——Fragment中使用左右滑动菜单
Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...
- Python开发【第十八篇】Web框架之Django【基础篇】
一.简介 Python下有许多款不同的 Web 框架,Django 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于 Django. Django 是一个开放源代码的Web应用框架,由 P ...
随机推荐
- ECMAScript6教程目录
ECMAScript 6 简介 let 和 const 命令 数组的解构赋值 字符串的扩展 正则的扩展 数值的扩展 函数的扩展 数组的扩展 对象的扩展 Symbol Set 和 Map 数据结构 Pr ...
- Kubernetes服务目录的设计
[编者的话]OpenShift 3.6新版本包括新的服务目录和服务中介技术预演版.它们是基于Kubernetes的孵化项目Kubernetes Service Catalog project.服务目录 ...
- 文件load事件:img、iframe
iframe的 load 事件 在所有为IFRAME动态添加onload监听事件的方法中,只有 使用事件监听方式为 IFRAME 的 onload 事件绑定处理函数,IE6.7.8才有效.所以为 IF ...
- uva10766生成树计数
此类题是给定一个无向图,求所有生成树的个数,生成树计数要用到Matrix-Tree定理(Kirchhoff矩阵-树定理) G的度数矩阵D[G]是一个n*n的矩阵,并且满足:当i≠j时,dij=0:当i ...
- 8.初识Lock与AbstractQueuedSynchronizer(AQS)
1. concurrent包的结构层次 在针对并发编程中,Doug Lea大师为我们提供了大量实用,高性能的工具类,针对这些代码进行研究会让我们对并发编程的掌握更加透彻也会大大提升我们队并发编程技术的 ...
- 在接口请求时报错Unrecognized field "zZF1"
这个问题是json序列化问题,当参数中出现大写字母组成的字段时(例如:ZZF1),此时需在字段上加入注解:@JsonProperty(value = "ZZF1")
- hadoop1.2.1伪分布模式安装教程
1:软件环境准备 1.1Hadoop: 我们使用hadoop Release 1.2.1(stable)版本,下载链接: http://mirrors.ustc.edu.cn/apache/hadoo ...
- day5-import机制详述
一.概述 但凡稍微复杂一些的python程序,都不可避免地需要import一些内置模块或外部模块,当然也有可能import进来一个package,java语言中也经常见到各种import打头,可见其用 ...
- 重温HTML
1 <h1> </h1>标题标签 <p> </p>段落标签 <img src=“ ”>图片标签 2. <em>和<stro ...
- maven_00_资源帖
一.官方资料 Maven Getting Started Guide 二.精选资料 Maven for building Java applications - Tutorial Maven Tuto ...