继续学习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. TZ_05_Spring_事物的xml开发和annotation开发

    1.Spring_事物的xml开发 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=& ...

  2. js图片碎片效果(移动端也适用)

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  3. 在C#应用中使用Common Logging日志接口

    我在C#应用中一般使用log4net来记录日志,但如果项目中有个多个工程,那么没有工程都需要引用log4neg,感觉很不爽.不过今日在开spring.net的时候,看到了有个通用日志接口Common ...

  4. win10 下安装docker,创建镜像,push镜像到私有仓库,创建私有仓库,修改镜像仓库地址

    通过连接下载window docker安装文件,https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.ex ...

  5. springmvc下载一个文档下载接口里的文档

    A提供了一个文件下载的接口,在调用的时候可以直接在前端用a标签来调用 <a href="http://" target="_blank">下载< ...

  6. QT应用qmake添加应用图标

    总体解决方案: 1.搜索 [Setting the Application Icon]帮助 2.http://doc.qt.io/qt-5/appicon.html 3.可以在主pro文件中加入如下语 ...

  7. 微信小程序--flex常用的属性

    Flex布局 display:flex 指定当前盒子为伸缩盒 flex-direction:column 把盒子内容垂直从上往下排列 row 把盒子内容垂直从左往右排列 flex-wrap: wrap ...

  8. vim中NERDTREE插件的使用

    一个显示目录树的插件,很不错 学习于: http://blog.csdn.net/xiongzhengxiang/article/details/7375607

  9. TSP

    #include <iostream> #include <limits.h> #include <string.h>; using namespace std; ...

  10. SpringBoot启动报错Failed to determine a suitable driver class

    SpringBoot启动报错如下 Error starting ApplicationContext. To display the conditions report re-run your app ...