模板

基本数据类型

可以执行python语法,如:dict.get(), list['xx']

比django 更加亲近于 python

传入函数

  • django,自动执行
  • flask,不自动执行,需要自己加 " () " 了

简单的示例

def func1(arg):
return "hello" + arg @app.route("/index")
def index():
return render_template("s5index.html",f=func1) # 传入函数
<body>
<!-- 传入函数 -->
<!-- |safe 防xss攻击 -->
<h1>{{f('羊驼')|safe}}</h1> </body>

定义变量

模板中的变量是一种 " 占位符 ", 告诉模板该位置是从渲染模板时哪个数据中获取过来的

视图函数传变量

return render_template('xxx.html', 变量1=值, 变量2=值....)
return render_template('xxx.html', params=local())

示例

各类型数据后端传入

前端展示结果

嫌麻烦可以使用 locals ,全部封装在字典里面方便些

前端也需要更改

过滤器

作用

变量输出之前对变量值进行过滤

语法

可以多个过滤器追加使用

{{变量|过滤器()}}
{{变量|过滤器()|过滤器()}}

常用过滤器

trim

{{var|trim}}

取消字符串两端的空格

default

{{var|default('default value')}}

如果变量为 undefined 采用默认值作为输出

truncate

{{var|truncate(length)}}

如果字符串超过指定长度,  截取,  后面显示 "..."

其他见官网,点击这里

标签

每个标签表示不同的服务器端功能

语法

{% 标签内容 %}

{% 结束标签 %}

常用标签

if 判定标签

{% if 条件 %}
  满足条件时运行内容
  可以是 html 代码也可以是 服务器端内容
{% endif %}
{% if 条件 %}
满足执行内容
{% else %}
不满足执行内容
{% endif %}
{% if 条件1 %}
  
{% elif 条件2 %}
  
{% else %}
  
{% endif %}

for 循环标签

{% for 变量 in 可迭代元素 %}
变量属于服务端的内容, 使用时需要使用 {{}} 或者 {%%} 括起来
{% endfor %}

内置变量 - loop

无需声明. 直接使用即可, 表示本次循环的一些相关信息

常用属性

  • loop.index  表示当前循环次数 , 从 1 开始
  • loop.index0  表示当前循环的下标, 从 0 开始
  • loop.first   表示当前循环是否是第一次循环  返回布尔值
  • loop.last   表示当前循环是最后一次循环 返回布尔值

macro 宏标签

相当于声明函数

通常用于代码复用,声明后在被使用的地方直接通过函数在调用即可

{% macro 声明函数(参数) %}
{% endmacro %}
{{ 声明函数(参数) }}

当前文件直接使用实例

外部引用方式用例

通常都是将相同的部分保存在独立文件中, 然后引入文件后在要被用到的地方进行调用

声明  macro.html 模板文件

声明所用的宏

在要被使用的模板中导入, 然后通过别名即可调用宏定义的方法

    {% import 'macro.html' as macros %}

    {{ macros.showList() }}

模板继承

Flask使用的时Jinja2模板,所以其语法和Django无差别

类似类继承, 同样简化模板的开发

语法

父模板中  

父模板中 block 正常显示无任何影响

子模板中可以对 block 进行重写

{% block 块名 %}
定义一些正常显示内容
{% endblock %}

子模板中

需要指定所继承的父模板

{% extends '父模板文件' %}

指定 block 的重写

{% block 块名 %}
重写内容
{% endblock %}

实例

base.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<h1>模板</h1>
{% block content %} {% endblock %}
</body>
</html>

abc.html

{% extends "base.html"%}

{% block content %}
{{users.0}}
{% endblock %}

include

用法同django

{% include "form.html" %}

form.html
<form>
asdfasdf
</form>

安全

- 前端: 
  {{u|safe}}

- 后端:
  Markup("<input type='text' value=%s />"%(arg,))

静态文件

静态文件处理

在项目目录中创建一个 static 文件夹

该目录中允许分门别类存储静态文件

所有文件都必须通过 /static/ 来进行访问

    <img src="/static/62001505_p0_master1200.jpg" alt="">

Flask 模板系统的更多相关文章

  1. Flask:Flask的模板系统和静态文件

    1.Flask模板系统 Django框架有自己独立的模板系统,而Flask是没有的,Flask默认采用jinjia2模板系统,jinjia2是仿写Django模板系统的一个第三方模块,但性能上要比Dj ...

  2. Flask路由系统与模板系统

    路由系统 @app.route('/user/<username>') @app.route('/post/<int:post_id>') @app.route('/post/ ...

  3. flask框架模板系统

    flask模板引擎 flask默认使用了Jinja2模板引擎,我们在使用模板的时候,需要在同级目录文件夹下 创建一个templates的文件夹,然后这个文件夹内放置我们想要的模板实例即可: 在正常普通 ...

  4. 【 Python】模块学习之Flask模板引擎:jinja2

    原文链接:https://www.cnblogs.com/dachenzi/p/8242713.html 模板的概念 要了解jinja2,那么需要先理解模板的概念.模板在Python的web开发中广泛 ...

  5. 实验2、Flask模板、表单、视图和重定向示例

    实验内容 1. 实验内容 表单功能与页面跳转功 能是Web应用程序的基础功能,学习并使用他们能够更好的完善应用程序的功能.Flask使用了名为Jinja2的模板引擎,该引擎根据用户的交互级别显示应用程 ...

  6. Django模板系统

    创建模板对象Template类在django.template模板中 // 用django-admin.py startproject 命令创建一个项目目录django-admin.py startp ...

  7. python学习笔记--Django入门二 Django 的模板系统

    为了使网站更干净简洁更容易维护,页面的设计和Python的代码必须分离开.我们可以使用Django的 模板系统 (Template System)来实现这种模式. 几个简单的模板标签(tag):   ...

  8. 第四章:Django 的模板系统(转)

    在之前的章节中,你可能觉得例子中视图返回文本有点不妥.即是, HTML 是直接写在 Python 代码中的.     这种做法会导致这些问题:     要做任何设计上的更改就必须改写 Python 代 ...

  9. django模板系统基础

    模板系统基础Django模板是一个string文本,它用来分离一个文档的展现和数据 模板定义了placeholder和表示多种逻辑的tags来规定文档如何展现 通常模板用来输出HTML,但是Djang ...

随机推荐

  1. 南京邮电大学java程序设计作业在线编程第八次作业

    程序设计类课程作业平台 王利国 主页 教学资源 我的作业列表 程序设计课 账户 王利国的"Java语言程序设计第8次作业(2018)"详细 主页 我的作业列表 作业结果详细 总分: ...

  2. java体系结构与工作方式 《深入分析java web 技术内幕》第七章

    java体系结构与工作方式 7.1 JVM体系结构 何谓JVM JVM(Java Virtual Machine) 通过模拟一个计算机来达到一个计算机所具有的计算功能 指令集:计算机所能识别的机器语言 ...

  3. 部署 Prometheus Operator - 每天5分钟玩转 Docker 容器技术(179)

    本节在实践时使用的是 Prometheus Operator 版本 v0.14.0.由于项目开发迭代速度很快,部署方法可能会更新,必要时请参考官方文档. 下载最新源码 git clone https: ...

  4. selenium-确认进入了预期页面(四)

    selenium确认进入了预期页面 在自动化操作中,浏览器每次进入一个新的需要,都需要确认该页面是否打开或打开的页面是否是预期的页面 需要进行确认页面后方可进行下一步操作 确认页面有很多中方法,像笔者 ...

  5. ASP.NET Zero--前端应用程序

    前端应用程序 ASP.NET Zero包含可以作为您的公共网站或应用程序着陆页的起点的前端页面.首次运行项目时,您会看到主页如下所示: 这里有两页:主页和关于.这些页面的内容只是占位符和演示目的.您可 ...

  6. 获取spring security用户相关信息

    在JSP中获得 使用spring security的标签库 在页面中引入标签 <%@ taglib prefix="sec" uri="http://www.spr ...

  7. iOS开发者学习Flutter

    Flutter for iOS 开发者 本文档适用那些希望将现有 iOS 经验应用于 Flutter 的开发者.如果你拥有 iOS 开发基础,那么你可以使用这篇文档开始学习 Flutter 的开发. ...

  8. 无法启动mysql服务”1067 进程意外终止”解决办法【简记】

    本文章主要是总结了各种导致mysql提示无法启动MYSQL服务”1067 进程意外终止”的一些解决办法,有碰到mysql无法启动的同学可尝试参考. 在win7的服务器里开启MySql服务提示“wind ...

  9. Linux:Day12(上) 进程

    内核的功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能 Process:运行中的程序的一个副本. 存在生命周期 Linux内核存储进程信息的固定格式 :task struct 多个任务 ...

  10. spring boot拦截器WebMvcConfigurerAdapter,以及高版本的替换方案(转)

    文章转自 http://blog.51cto.com/12066352/2093750 最近项目采用spring icloud,用的spring boot版本是1.5.x的,spring boot 2 ...