继续学习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. jsp页面el表达式<c:choose> <c:when的用法

    等于 是if else <c:choose> <c:when test="${paginationModel.py_province != ''}"> 如果 ...

  2. 验证码倒计时js

    getVarify.js // 验证码计时--第一种 window.onload = function () { var send = document.getElementById('send'), ...

  3. 洛谷P1029 最大公约数和最小公倍数问题 [2017年6月计划 数论02]

    P1029 最大公约数和最小公倍数问题 题目描述 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件: 1 ...

  4. iOS项目转移到自动引用计数

    这里主要参考了Apple官方文档:Transitioning to ARC Release Notes 在支持iOS5的Xcode4中,创建项目会看到这样的选项: 这是iOS5的新特性,自动对象引用计 ...

  5. select @@identity的用法 转

    用select @@identity得到上一次插入记录时自动产生的ID 如果你使用存储过程的话,将非常简单,代码如下:SET @NewID=@@IDENTITY 说明: 在一条 INSERT.SELE ...

  6. java获取外网ip地址

    转自:http://blog.163.com/houjunchang_daxue/blog/static/13037938320134543310451/ /** * 获取外网IP.归属地.操作系统 ...

  7. 在n个球中,任意取出m个(不放回),求共有多少种取法

    要求: 在n个球中,任意取出m个(不放回),求共有多少种取法 分析: 假设3个球A,B,C,任意取出2个,可分为取出的球中含A的部分和不含A的部分.即AB,AC为一组,BC为一组. 设函数F(n,m) ...

  8. Leetcode5.Longest Palindromic Substring最长回文字串

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  9. SQLServer —— 流程控制语句

    一.IF - ELSE 语法: IF(条件) BEGIN 语句1 语句2 ... END ELSE BEGIN 语句1 语句2 ... END 说明: ELSE是可选部分,如果有多条语句,才需要BEG ...

  10. 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况

    一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...