继续学习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. POJ1151 离散化求矩形面积的并

    /*第一道离散化的题目,虽然是水题,不过还是很高兴...*/ #include<cstdio> #include<algorithm> #include<cstring& ...

  2. 【JZOJ5363】【NOIP2017提高A组模拟9.14】生命之树 Trie+启发式合并

    题面 45 在比赛中,我只想到了45分的暴力. 对于一个树中点对,相当于在他们的LCA及其祖先加上这个点对的贡献. 那么这个可以用dfs序+树状数组来维护. 100 想法 我想到了可能要用trie树来 ...

  3. NOIP2016参赛日志+总结

    这个故事告诉我们,成绩出来之前一定要装弱.这些文字是作者拿到程序后测了洛谷民间数据后写的. 2016.11.18  Day    0 早上五点半起床,洗漱完毕,吃了早饭,收拾收拾,七点半从家出发,去了 ...

  4. Leetcode96.Unique Binary Search Trees不同的二叉搜索树

    给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 假设n个节点存在二叉排序树的 ...

  5. vue-eslint配置文件

    做项目的时候,我把eslint设置为了false,可想而知提交会产生的冲突 让我一个一个解决肯定不可能的,eslint的rule很多 在vue的配置文件.eslintrc.js中配置以下选项 这样只需 ...

  6. ThinkPHP实现定时执行任务的两种方法 - 博客频道 - CSDN.NET

    在平常的项目中我们总是会遇到需要将某个方法任务定时执行的问题,定时执行方法任务如果我们拥有服务器的权限,我们可以直接在服务器设置定时任务,例如在Windows的任务计划程序中进行设置,在Linux中编 ...

  7. Django项目:CRM(客户关系管理系统)--11--04PerfectCRM实现King_admin注册功能03

    #base_admin.py #Django admin 注册功能的形式 # sites = { # 'crm':{ # 'customers':CustomerAdmin, # 'customerf ...

  8. LUOGU P1053 篝火晚会 (Noip 2015 )

    题目描述 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了"小教官".在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会.一共有 nnn 个同学,编号 ...

  9. ylbtech-自信:自信

    ylbtech-自信:自信 自信心(confidence),在心理学中,与其最接近的是班杜拉(A.Bandura)在社会学习理论中提出的自我效能感 (self-efficacy)的概念,是指个体对自身 ...

  10. 【JZOJ3636】【BOI2012】Mobile(mobile)

    Mission 著名的手机网络运营商Totalphone 修建了若干基站收发台,以用于把信号网络覆盖一条新建的高速公路.因为Totalphone 的程序员总是很马虎的,所以,基站的传功功率不能独立设置 ...