jinja2模版

from flask import Flask,render_template

app = Flask (__name__)

@app.route ('/<name>')
def index(name):
return render_template('index.html',name=name) @app.route ('/user/<name>')
def user(name):
return render_template('user.html',name=name) if __name__ == '__main__':
app.run (debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Hello! {{ name|capitalize }}
</body>
</html>

jinja2 能识别所有类型的变量,比如列表,字典,对象

<p>{{ mylist[3]}}</p>
<p>{{ mydict['key']}}</p>
<p>{{ mylist['key']}}</p>
<p>{{ myobj.somemethod() }}</p>

过滤器

safe    渲染值时不转义
capitalize 把值的首字母转换成大写,其他字母小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 把值中每个单词的首字母变成大写
trim 把值的首尾空格去掉
striptags 渲染之前把所有的HTML标签都删除

控制结构

if条件控制

{% if user %}
hello {{ user }}
{% else %}
hello,stranger!
{% endif %}
for 循环
<ul>
{% for comment in comments %}
<li>{{ comment }}</li>
{% endfor %}
</ul>

宏(函数)

{% macro render_comment(comment) %} #声明一个宏(函数)
<li>{{ comment }}</li> # return 值
{% endmacro %} #结束 <ul>
{% for comment in comments %}
{{ render_comment(comment) }} #调用宏
{% endfor %}
</ul>

导入宏

{% import 'macros.html' as macros %}
<ul>
{% for comment in comments %}
{{ macros.render_comment(comment) }}
{% endfor %}
</ul>

模版继承

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{% block head %}
<title>{% block title %}{% endblock %}- my application</title>
{% endblock %}
</head>
<body>
{% block body %}
{% endblock %}
</body>
</html>

base html

{% extends 'base.html' %}

{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style>
</style>
{% endblock %}
{% block body %}
<h1>hello,world!</h1>
{% endblock %}

index html

使用flask-bootstrap 集成Bootstrap

pip install flask-bootstrap

安装后即可继承使用Bootsftrap所有文件的基模版

app
user.html

bootstrap 中scripts和styles块如果想添加新内容,必须使用super()函数

{% block scripts %}
{{ super() }}
<script type="text/javascript" src = 'myscript.js'></script>
{% endblock %}

自定义错误页面

app
base.html
404

url_for()

url_for('index',_external=true) 返回绝对路径

base 模版添加icon图标

添加ico图标

falsk-moment本地化日期和时间

pip install flask-moment

from flask_moment import Moment
from datetime import datetime
moment = Moment(app) @app.route ('/')
def index1():
return render_template('index.html',current_time = datetime.utcnow()) if __name__ == '__main__':
app.run (debug=True)
base.html
<p>本地时间和日期是{{ moment(current_time).format('LLL') }}</p>
<p>那是{{ moment(current_time).fromNow(refresh=True) }}</p>

format('LLL')对应的不同复杂度

fromNow会显示相对时间戳

flask-moment 包含format()、fromNow()、fromTime()、calendar()、valueOf()、unix()

常用格式化参数

设置语言

<!--使用中文,默认是英语的-->
{{ moment.lang("zh-CN") }} 在模版中渲染,如:
<p>现在时间时: {{ moment().format('YYYY年M月D日, hh:mm:ss a') }}.</p>
hh:mm:ss 12小时制,
HH:mm:ss 24小时制
<p>已经过去了: {{ moment().fromTime(time) }}.</p> <p>{{ moment().calendar() }}.</p>

结果
现在时间时: 2015年4月22日, 10:06:33 上午.

已经过去了: 21年内.

今天上午10点06.

Flask学习 二 模板的更多相关文章

  1. [Flask]学习杂记--模板

    这个学习杂记主要不是分享经验,更多是记录下falsk的体验过程,以后做东西在深入研究,因为django之前用的时间比较长,所以很多概念都是一看而过,做个试验了解下flask的功能. flask中使用是 ...

  2. flask 学习(二)

    安装了flask扩展 以及flask-bootstrap 默认情况下,flask在template文件夹寻找模板. flask 加载的是Jinja2模板,该模板引擎在flask中由函数render_t ...

  3. flask学习(二):认识web

    url详解: URL是Uniform Resource Locator 的简写,统一资源定位符 一个URL由以下及几部分组成: scheme://host:port/path/?query-strin ...

  4. web开发框架Flask学习二

    jinja2模板规范 在当前项目中创建一个文件为templates的文件夹,将其设置为模板文件夹,新建的html为模板页面, 在视图函数中使用render_template(".html的文 ...

  5. Flask学习目录

    目录 Flask学习初识 Flask学习二

  6. Flask 学习(二)jinja2模板介绍

    控制语句和表达式 举例 Flask Python代码 from flask import Flask, render_template, redirect, request app = Flask(_ ...

  7. Python Flask学习笔记之模板

    Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...

  8. Flask 学习篇二:学习Flask过程中的记录

    Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Application and Request Context ...

  9. Flask 学习(三)模板

    Flask 学习(三)模板 Flask 为你配置 Jinja2 模板引擎.使用 render_template() 方法可以渲染模板,只需提供模板名称和需要作为参数传递给模板的变量就可简单执行. 至于 ...

随机推荐

  1. 【BZOJ4566】找相同字符(后缀自动机)

    [BZOJ4566]找相同字符(后缀自动机) 题面 BZOJ 题解 看到多串处理,\(SA\)就连起来 \(SAM???\) 单串建自动机 然后其他串匹配 对于一个串建完\(SAM\)后 另一个串在\ ...

  2. 【BZOJ1975】【SDOI2010】魔法猪学院(搜索,A*,贪心)

    我已经沉迷于粘贴题目地址了... 题解 很显然的贪心呀, 就是一定是最短的若干条路径的长度 所以,不断拓展k短路就可以了 至于怎么用A* 评估函数f(x)=dis[x]+g[x] 其中,dis是到N号 ...

  3. 清橙A1212:剪枝

    题面 清橙 Sol 一种新的树上\(DP\)姿势 从左往右按链\(DP\) 做法: 维护两个栈\(S1\),\(S2\) \(S1\)存当前的链 \(S2\)存分叉点以下要改的链 \(Dfs\),弄一 ...

  4. Bzoj2442:修剪草坪

    Sol 一个很显然的暴力,设\(f[i]\)表示选到\(i\)的最优效率 每次枚举一段不与前面连续的长度小于\(k\)的区间转移来 # include <bits/stdc++.h> # ...

  5. 在不同环境下MD5加密相同字符串,密文不一样的问题

    这是昨天做一个接口对接时遇到的一个问题.下面是md5加密的算法 public static String md555(String plainText) throws UnsupportedEncod ...

  6. django 下拉菜单显示为object的解决办法

    在创建完Django数据库结构之后,使用Django自带的强大的admin功能往数据库中添加数据,图形化界面如下: 但时候有下拉框选项(只要在model中有定义Charfield就会显示为下拉框),如 ...

  7. 登录界面输入判断为空的bug

    这个bug我改了两天啊两天,直到大神帮我debug了一下... 这是之前出错的部分.. <script type="text/javascript" language=&qu ...

  8. WordPress中添加自定义评论表情包的方法

    先来看看效果: 现在由于WordPress版本更新,再加上WordPress主题也越来越多,而现在的主题一般都是禁用了WordPress自带的评论表情,其实自带 的评论表情也是很丑的,但是以前我们可以 ...

  9. nodejs-url网址解析的好帮手

    HTTP协议中url和uri的区别. 每个url都是uri,但是不是每个uri都是url. URI:是统一资源的标识符,web上可用的每种资源如HTML文档.图像.视频片段.程序等都是一个URI来定位 ...

  10. Spring源码学习:第1步--在Spring源码中添加最简单的Demo代码

    为了最大程度地贴近Spring源码并进行学习,一种比较直接的做法是:直接在Spring源码中加入Demo代码,并进行调试. 参照以前使用Spring的经验,Spring最简单的使用方法是:一个实体类. ...