请关注微信公众号:自动化测试实战

今天我们继续模板的知识,现在我们增加字典的复杂度,这个时候在render_template第二个参数可以传**title,以后我们会用**context代替原来的title=title

# coding: utf-8

from flask import Flask, render_template

app = Flask(__name__)  # type: Flask
app.debug = True @app.route('/')
def hello_world():    title = {"tPrize": "key",
            "info": {"name": u"Warren",
                     "age": 18,
                     "gender": u"男"},
            "val": {"title": u'标题',
                    "content": u'内容'}}
   
   return render_template('post/index.html', **title)
    if __name__ == '__main__':
   app.run()

相应的我们的index.html文件也要做一些修改,就是将变量处的传参改为具体的key值,比如我们想获取title里面的info值,那么我们只需要在大胡须里写info即可:

<!DOCTYPE html>

<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>这里是title</title>
</head>
<body>    <h1>{{ info }}</h1> </body>
</html>

执行代码可以看到页面显示的是info的值:

html中,注释用{# 注释内容 #},快捷键是ctrl+/比如:

现在我们新建一个登录的html文件

代码(方便大家复制)

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>登录页面</title>
</head>
<body>
   这是登录页面
</body>
</html>

在主文件中新建login方法:

@app.route('/login/')
def login():
   return render_template('login.html')

index.html文件中增加一行超链接:<a href='#'>链接到登录页面</a>

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>这里是title</title>
</head>
<body> {#    <p>这段代码被注释了</p>#}
   <h1>{{ info }}</h1>
   <a href="#">链接到登录页面</a>
</body>
</html>

现在我们想要跳转页面,那么超链接里`href`就要写跳转的url,如果粗鲁一点就直接写'/login/',这样肯定是可以的:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>这里是title</title>
</head>
<body> {#    <p>这段代码被注释了</p>#}
   <h1>{{ info }}</h1>
   <a href="/login/">链接到登录页面</a>
</body>
</html>

但是如果下次登录页面变成/post/login/我们还要来修改这里的路径,所以这时候我们就要用到url_for了。将地址改为:{{  url_for('login') }}即可,注意,url_for里面的传参是函数名,这样我们即使修改路径,只要不修改函数名,那么就不必每次都来修改这里的链接值了。

我们来页面上通过开发者工具查看一下,发现给的路径就是'login'

只要我们点击“链接到登录页面”,页面就会到转到127.0.0.1:5000/login/了。

最后附上本节的所有代码,方便大家自己下去操作:

结构:

index.html

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>这里是title</title>
</head>
<body> {#    <p>这段代码被注释了</p>#}
   <h1>{{ info }}</h1>
   <a href="{{ url_for('login') }}">链接到登录页面</a>
</body>
</html>

rendertemplateDemo.py

# coding: utf-8

from flask import Flask, render_template

app = Flask(__name__)  # type: Flask
app.debug = True @app.route('/')
def hello_world():    title = {"tPrize": "key",
            "info": {"name": u"Warren",
                     "age": 18,
                     "gender": u"男"},
            "val": {"title": u'标题',
                    "content": u'内容'}}    return render_template('post/index.html', **title) @app.route('/login/')
def login():
   return render_template('login.html') if __name__ == '__main__':
   app.run()

login.html

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>登录页面</title>
</head>
<body>
   这是登录页面
</body>
</html>

flask第十九篇——模板【3】的更多相关文章

  1. flask第二十二篇——模板【4】过滤器

    请关注微信公众号:自动化测试实战 先来教大家一个pycharm设置默认模板的方法.我们每次新建模板或者平时写代码打开以后可能都要重复写# coding: utf-8这些代码,其实我们可以设置好模板,让 ...

  2. flask第十八篇——模板【2】

    请关注公众号:自动化测试实战 上一节我们介绍了模板的基本使用方法,现在我们想一个问题,如果把index.html放到template文件夹下面的文件夹该怎么办呢?其实很容易,当文件夹结构如下图所示时: ...

  3. flask第二十九篇——一个例子+【更新内容通知】

    请关注公众号:自动化测试实战 大家先自己写一下,船长写这个花了半个小时,因为我和大家一样,也是新手: 写一个页面如下,点击书名以后跳转到书的详情页 书的信息如下: books = [ { 'id': ...

  4. flask第二十六篇——模板【控制语句】【2】

    如果你也在学flask,就请加船长的公众号:自动化测试实战 我们先补充一下for循环的知识,我们之前说过,flask是由Jinja2+sqlAlchemy+werkzeug组成的,我们现在学的控制语句 ...

  5. flask第二十四篇——模板【6】自定义过滤器

    请关注孟船长的公众号:自动化测试实战 大家想了解其他过滤器可以参考这里: http://jinja.pocoo.org/docs/dev/templates/#builtin-filters ---- ...

  6. Python之路【第十九篇】:爬虫

    Python之路[第十九篇]:爬虫   网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...

  7. Egret入门学习日记 --- 第十九篇(书中 8.8~8.10 节 内容)

    第十九篇(书中 8.8~8.10 节 内容) 开始 8.8节. 重点: 1.类型推断. 2.类型强制转换,使其拥有代码提示功能. 3.除了TS自带的类型判断,Egret官方也提供了类型判断的方法. 操 ...

  8. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇——ActivityGroup实现tab功能>.这 ...

  9. Flask最强攻略 - 跟DragonFire学Flask - 第十六篇 Flask-Migrate

    终于到了Flask-Migrate,之前在学习Flask-SQLAlchemy的时候,有的同学就提过类似的问题,Flask支持 makemigration / migrate 吗? 答案在这里该诉你, ...

随机推荐

  1. Java网络编程学习A轮_01_目标与基础复习

    A. A轮目标 复习网络编程基础知识,重点学习下TCP三次握手四次挥手,以及可能引发的异常情况. 回顾 Socket 编程,好多年没写(chao)过相关代码了. 重学 NIO,以前学的基本忘光了,毕竟 ...

  2. photoshop CS5制作具有立体感的按钮

    今天在学习用photoshop cs5制作html模板的过程中,遇到了立体感按钮的制作问题.当然按钮的立体感也可以用CSS来实现,这里主要是用PS来制作具有立体感的按钮. 我也是PS新手,下面的东西, ...

  3. MongoDB基于GridFS管理文件

    前言 GridFS是一种将大型文件存储在MongoDB的文件规范: 数据库支持以BSON格式保存二进制对象. 但是MongoDB中BSON对象最大不能超过4MB. GridFS 规范提供了一种透明的机 ...

  4. torch7框架 深度学习(1)

    前面已经安装好了torch,下面就来看看如何在torch框架上搭建深度学习模型,我一直觉得源码结合原理是机器学习最好的学习途径.所以我们从分析一个简单的案例开始吧. 参考Supervised Lear ...

  5. python报错:TypeError: 'int' object is not subscriptable

    检查一遍报错的所在行,此报错一般是在整数上加了下标: 比如:   a = 4   c=a[2] 报错:line 2, in <module>    c=a[2] TypeError: 'i ...

  6. iptables(五)iptables匹配条件总结之二(常用扩展模块)

    iprange扩展模块 之前我们已经总结过,在不使用任何扩展模块的情况下,使用-s选项或者-d选项即可匹配报文的源地址与目标地址,而且在指定IP地址时,可以同时指定多个IP地址,每个IP用" ...

  7. 033——VUE中安装使用vue-devtools调试工具用于监控数据变化

    vue官网:https://cn.vuejs.org/ 下的官方仓库:vue-devtools  安装到火狐或谷歌下都可以,安装成功之后,按F12查看就可以了

  8. HDU 2062 Subset sequence 数位dp,思路 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=2062 Subset sequence Time Limit: 1000/1000 MS (Java/Others ...

  9. ffmpeg 命令小记

    指定格式转码 ffmpeg -i 1.mp4 -c:v libx264 -c:a aac -y 1.flv 等时长转为m3u8格式 ffmpeg -i 1.avi -c:v libx264 -c:a ...

  10. Viewpager+Fragmnet懒汉式注意

    1.new的时候不会触发setUserVisibleHint(): 2.setUserVisibleHint()在ViewPager中当前缓冲页跳转,可见到不可见或者不可见到可见的时候触发: 3.ge ...