第六章:FLASK模版引擎以及模版方法

一,上节回顾:

  1) 什么是蓝图?

  2) 为什么用蓝图?

  3) 怎么实例化一个蓝图?

  4) 怎么将蓝图注册到flask的核心对象上?

二,什么是模版引擎?

  模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。(摘自 百度百科)

三,模版引擎都有什么?flask用的是什么模版引擎?

  模版引擎有很多种,像 PHP(smarty)  Python(Janjia,marco)  Java(Thymeleaf ,Freemarker) 等

  Flask 常用的模版引擎 是 Janjia2

四,模版渲染和传递参数

  1. 在 app 应用下 新建一个 templates 文件夹,然后里面新建 user.html 文件

  

  2.在admin/user.py中 引入render_templates

  

  3. 调用浏览器 http://127.0.0.1:8888/user

    

  4. templates只能在app下吗?

    flask 框架 默认templates(模版文件)安装在项目的根目录下,项目跟目录是根据flask的核心app一直,所以鉴于本例,templates只能在app下。

    如果我不想让我的模版文件夹在app下,我可不可以更改位置呢?答案是可以的,你可以在 Flask(__name__)这里更新一下就行,具体代码如下:

    

    项目目录:

    

    浏览器调用 http://127.0.0.1:8888/user

    

五,模版语法

1.  变量

数据量小的时候可以选择此种写法:

user.py 文件代码

from app.admin import web
from flask import render_template
@web.route(‘/user‘)
def user():
    return render_template(‘user.html‘,name =‘xiaoerhei‘)

user.html 中代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
    {{ name }}测试页面
</body>
</html>

浏览器调用: http://127.0.0.1:8888/user

数据量大的时候可以选择此种写法

user.py

from app.admin import web
from flask import render_template
@web.route(‘/user‘)
def user():
    dict = {"name":"pidaye","age":5}
    return render_template(‘user.html‘,data =dict)

user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
    姓名:{{ data.name }}<br />
    年龄:{{ data.age }}
</body>
</html>

浏览器调用 : http://127.0.0.1:8888/user

2. 过滤器

 过滤器的使用方法,变量可以通过 过滤器 修改。过滤器与变量用管道符号( | )分割,并且也 可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作为 后一个过滤器的输入。

  语法: {{  avatar | default(‘xxx‘)  }}

  user.py

from app.admin import web
from flask import render_template
@web.route(‘/user‘)
def user():
    dict = {"name":"   pidaye"}
    return render_template(‘user.html‘,data =dict)

  user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
    {{ data.name | striptags | upper }}测试页面
</body>
</html>

  

过滤器的清单 http://docs.jinkan.org/docs/jinja2/templates.html#builtin-filters

常用的过滤器有:

  abs(value):返回一个数值的绝对值。示例:-1|abs

  default(value,default_value,boolean=false):如果当前变量没有值,则会使用参数中的值来代替。

  escape(value)或e:转义字符,会将<、>等符号转义成HTML中的符号。示例:content|escape或content|e。

  first(value):返回一个序列的第一个元素。示例:names|first

  format(value,*arags,**kwargs):格式化字符串。比如:  {{ "%s" - "%s"|format(‘Hello?‘,"Foo!") }}     将输出:Helloo? - Foo!

  last(value):返回一个序列的最后一个元素。示例:names|last。

  length(value):返回一个序列或者字典的长度。示例:names|length。

  join(value,d=u‘‘):将一个序列用d这个参数的值拼接成字符串。

  safe(value):如果开启了全局转义,那么safe过滤器会将变量关掉转义。示例:content_html|safe

  int(value):将值转换为int类型。

  float(value):将值转换为float类型。

  lower(value):将字符串转换为小写。

  upper(value):将字符串转换为小写。

  replace(value,old,new): 替换将old替换为new的字符串。

  truncate(value,length=255,killwords=False):截取length长度的字符串。

  striptags(value):删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格。

  trim:截取字符串前面和后面的空白字符

  string(value):将变量转换成字符串

  wordcount(s):计算一个长字符串中单词的个数。

3. if 语句,和python中的if 语句几乎一样:

{% if 10>5 %}
   10>5
{% else %}
   10<5
{% endif %}

  

4. for 语句,和 python语法几乎一致

{% for i in range(10)%}
        {{ i }}
{% endfor %}

  

5. 模版继承

1. 继承作用和语法:
作用:可以把一些公共的代码放在父模板中,避免每个模板写同样的代码。
语法:

{% extends ‘base.html‘ %}

2. block实现:
 作用:可以让子模板实现一些自己的需求。父模板需要提前定义好。
 注意点:字模板中的代码,必须放在block块中。

语法:

父文件:
        {% block 名称 %}

            默认值

        {% endblock %}

子文件:
        {% block 名称 %}

            这是子文件的内容

        {% endblock %}    

# 子文件block 的名称 要和 父文件block 的名称保证一致

  

示例:

base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>这是头部</h2>
  {% block section %}

  {% endblock %}
<h2>这是底部</h2>
</body>
</html>

user.html

{% extends ‘base.html‘ %}
{% block section %}
    这是中间位置
{% endblock %}调用

浏览器访问: http://127.0.0.1:8888/user

  

    

  

原文地址:https://www.cnblogs.com/wuxiaoshi/p/10413531.html

时间: 2024-08-30 14:42:21

第六章:FLASK模版引擎以及模版方法的相关文章

Django的模版引擎与模版使用

Django的模版引擎与模版使用 模版引擎是模版响应的后端.模版指的是HTML.css,js等相关的文件.模版引擎是将这些表示层文件与数据相整合在一起,然后将整合后的数据给到响应类型判断采用一次性响应还是流响应,确定响应类型后将模版加工后的数据反馈给用户. Django支持两种模板引擎,Django模版引擎和Jinja2模版引擎.在settings.py文件中对模版引擎进行配置(BACKEND).模版目录在列表中的顺序是搜索模版的顺序. 文件中是这样写的: TEMPLATES = [ { 'BA

Symfony2模版引擎使用说明手册

一.基本使用 {{ demo }}输出一个demo变量; {{% func %}}通常是包含一个twig函数例如 for; 举个for循环的例子: {{% for i in 0..10 %}} <em>{{ i }}</em> {{% endfor %}} 当然也可以打印对象,例: {{% for user in users %}} <span>user.username</span> {{% endfor %}} 注:users是从控制器中传来的对象参数

Java模版引擎velocity的使用

前言 关于velocity与SpringMVC的配置请参考前一篇文章,此处不再介绍.velocity作为Java模版引擎的主要目的是为了允许任何人使用简单而强大的模板语言来引用定义在Java代码中的对象.在velocity文件中可以给该页面指定模版布局,从而节省了大量的时间去写通用的模版布局.可以定义变量,与Java方法进行交互. 定义一个layout模版 在上一篇文章中提到了配置默认模版,当然也可以不使用默认模版即在要用到的页面的最上端写上 #set($layout='layout/yourl

js模版引擎handlebars.js实用教程

一.为什么选择Handlebars.js 据小菜了解,对于java开发,涉及到页面展示时,比较主流的有两种解决方案: 1. struts2+vo+el表达式. 这种方式,重点不在于struts2,而是vo和el表达式,其基本思想是:根据页面需要的信息,构造出一个实体,这个实体中包含了界面需要的所有属性,通常这个实体是由N个表中的字段构成的,俗称vo.由于vo的属性可以是String.List.Map等等等,又可以vo套vo,因此这种方式非常灵活,也非常好用. 在后台对vo进行赋值,通过strut

java官网门户源码 SSM框架 自适应-响应式 freemarker 静态模版引擎

来源:http://www.fhadmin.org/webnewsdetail3.html 前台:支持(5+1[时尚单页风格])六套模版,可以在后台切换 官网:www.fhadmin.org 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的响应式布局,同一页面同时支持PC.平板.手机(三合一)浏览器访问 4.springmvc +sp

Flask 教程 第十六章:全文搜索

本文翻译自The Flask Mega-Tutorial Part XVI: Full-Text Search 这是Flask Mega-Tutorial系列的第十六部分,我将在其中为Microblog添加全文搜索功能. 本章的目标是为Microblog实现搜索功能,以便用户可以使用自然语言查找有趣的用户动态内容.许多不同类型的网站,都可以使用Google,Bing等搜索引擎来索引所有内容,并通过其搜索API提供搜索结果. 这这方法适用于静态页面较多的的大部分网站,比如论坛. 但在我的应用中,基

如何在前端模版引擎开发中避免使用eval函数

前段时间,想着自己写一个简单的模版引擎,便于自己平时开发demo时使用.于是根据自己对模版引擎的理解,定义自己的模版格式,然后,根据自己定义的格式,编写处理函数,将模版标签中的字符串,解析成可执行的字符串,然后再用eval函数执行该可执行的字符串. 然后问题就出现了!eval等价于evil! 为什么呢?各大js权威书籍上都不提倡使用eval.下面我详细的解释一下为什么不提倡. 首先,大家需要知道,js并不是一门解释型语言.它和其他大家熟知的编程语言(c,java,c++)一样,是编译型语言.但是

前端数据模版引擎的总结

模板的工作原理可以简单地分成两个步骤:模板解析(翻译)和数据渲染.这两个步骤可分别部署在前端或后端来执行.如果放在后端执行,则是像Smarty,FreeMarker这样的后端模板引擎,而如果放在前端来执行,则是我们要探讨的前端模板. FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写,模板用servlet提供的数据动态地生成 HTML,模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度.这里不再对后端模版进行描述. 前端模版提高了前端开发

Express模版引擎hbs备忘

最近几天折腾了下express,想找个合适的模版引擎,下面是一些折腾过程的备忘 选择标准 选择一门模版语言时,可能会考虑的几点 语法友好(micro tmpl那种语法真是够了) 支持模版嵌套(子模版的概念) 支持模版继承(extend) 前后端共用 有容错处理(最好定位到具体出错位置) 支持预编译(性能好) 注意到hbs,似乎满足大部分的需求:https://github.com/donpark/hbs getting started demo地址:https://github.com/chyi