前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >宏、继承、包含、特殊变量

宏、继承、包含、特殊变量

作者头像
Python进击者
发布于 2019-09-25 00:27:29
发布于 2019-09-25 00:27:29
1.4K00
代码可运行
举报
文章被收录于专栏:JAVAandPython君JAVAandPython君
运行总次数:0
代码可运行

主要内容:

1. 模板宏的使用

2. 宏定义在外部的使用

3. 模板的继承

4. 模板的包含

5. Flask中的特殊变量和方法

模板宏的使用

大家可能是第一次接触这个字,在这里是什么意思呢?宏其实就类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余。

我们来看一个宏的写法(不带参数的宏):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% macro input() %}  <input type="text"         name="username"         value=""         size="30"/>{% endmacro %}

上面代码中,其实就类似于在python中定义了一个名为input的函数。

定义了这个宏,那该如何去使用它?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{ input()}}

直接通过两个大括号就ok了

既然有不带参数的宏,肯定有带参数的宏,如何写?看下面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% macro input(name,value='',type='text',size=20) %}    <input type="{{ type }}"           name="{{ name }}"           value="{{ value }}"           size="{{ size }}"/>{% endmacro %}

使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{ input(value='name',type='password',size=40)}}

相信大家仔细看一下代码就能够明白这是什么意思,大家完完全全可以按照函数的思想去对待宏。

宏定义在外部的使用

宏除了在模板当中去编写,还能单独一个模板专门来写宏吗?答案当然是可以的,其实这一点也很类似于python。

Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复。

我们创建一个macro.html文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% macro input() %}    <input type="text" name="username" placeholde="Username">    <input type="password" name="password" placeholde="Password">    <input type="submit">{% endmacro %}

在其他模板当中使用,需要先导入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% import 'macro.html' as func %}{% func.input() %}

模板的继承

模板继承是为了重用模板中的公共内容。一般Web开发中,继承主要使用在网站的顶部菜单、底部。这些内容可以定义在父模板中,子模板直接继承,而不需要重复书写。

{% block top %}``{% endblock %}标签定义的内容,相当于在父模板中挖个坑,当子模板继承父模板时,可以进行填充。

子模板使用extends指令声明这个模板继承自哪?父模板中定义的块在子模板中被重新定义,在子模板中调用父模板的内容可以使用super()。

例如我们创建一个父模板base.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% block top %}    顶部菜单{% endblock top %}
{% block content %}{% endblock content %}
{% block bottom %}  底部{% endblock bottom %}

子模板:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% extends 'base.html' %}{% block content %}   需要填充的内容{% endblock content %}

模板继承使用时注意点:

  • 不支持多继承。
  • 为了便于阅读,在子模板中使用extends时,尽量写在模板的第一行。
  • 不能在一个模板文件中定义多个相同名字的block标签。
  • 当在页面中使用多个block标签时,建议给结束标签起个名字,当多个block嵌套时,阅读性更好。

模板的包含

Jinja2模板中,除了宏和继承,还支持一种代码重用的功能,叫包含(Include)。它的功能是将另一个模板整个加载到当前模板中,并直接渲染。

include怎么使用?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{\% include 'hello.html' %}

包含在使用时,如果包含的模板文件不存在时,程序会抛出TemplateNotFound异常,可以加上ignore missing关键字。如果包含的模板文件不存在,会忽略这条include语句。

示例:

include的使用加上关键字ignore missing

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{\% include 'hello.html' ignore missing %}

总结一下上面讲的宏、继承、包含:

  • 宏(Macro)、继承(Block)、包含(include)均能实现代码的复用。
  • 继承(Block)的本质是代码替换,一般用来实现多个页面中重复不变的区域。
  • 宏(Macro)的功能类似函数,可以传入参数,需要定义、调用。
  • 包含(include)是直接将目标模板文件整个渲染出来。

Flask中的特殊变量和方法

这里给大家补充一下Flask当中的一些特殊的变量和方法,大家之前肯定也看到过。

config 对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
config 对象就是Flask的config对象,也就是 app.config 对象。

{{ config.SQLALCHEMY_DATABASE_URI }}

request 对象:

就是 Flask 中表示当前请求的 request 对象,request对象中保存了一次HTTP请求的一切信息。

request常用的属性如下:

属性

说明

类型

data

记录请求的数据,并转换为字符串

*

form

记录请求中的表单数据

MultiDict

args

记录请求中的查询参数

MultiDict

cookies

记录请求中的cookie信息

Dict

headers

记录请求中的报文头

EnvironHeaders

method

记录请求使用的HTTP方法

GET/POST

url

记录请求的URL地址

string

files

记录请求上传的文件

*

url_for 方法:

url_for() 会返回传入的路由函数对应的URL,所谓路由函数就是被 app.route() 路由装饰器装饰的函数。如果我们定义的路由函数是带有参数的,则可以将这些参数作为命名参数传入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{{ url_for('index') }}
{{ url_for('post', post_id=1024) }}

get_flashed_messages方法:

返回之前在Flask中通过 flash() 传入的信息列表。把字符串对象表示的消息加入到一个消息队列中,然后通过调用 get_flashed_messages() 方法取出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% for message in get_flashed_messages() %}    {{ message }}{% endfor %}

这里多说两句,get_flashed_messages() 所处理的信息只能看一次,也就是说你访问过里面的信息一次了,第二次你就看不到了,我们也称之为闪现。

这个是如何实现的呢?它的数据其实是存储在session当中,当你访问了一次之后就会进行删除。用到了session所以我们需要设置SERECT_KEY(之前我们有写过) 不然就会报错。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python进击者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
flask框架(二)配套代码
1、cookie.py """ - 解释: 用来保持服务器和浏览器交互的状态的, 由服务器设置,存储在浏览器 - 作用: 用来做广告推送 - cookie的设置和获取 - 设置cookie: response.set_cookie(key,value,max_age) - max_age: 表示cookie在浏览器的存储时间,单位是秒 - 获取cookie: request.cookies.get("key") """ from flask import Flask, make_res
小闫同学啊
2019/07/18
1.3K0
Flask模板
在模板中{{ variable }}结构表示变量,是一种特殊的占位符,告诉模板引擎这个位置的值,从渲染模板时使用的数据中获取;Jinja2除了能识别基本类型的变量,还能识别{};
py3study
2020/01/16
2.7K0
web开发框架Flask学习二
           在form表单中设置csrf              <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
py3study
2020/01/19
8050
Flask 模板 - 宏、继承、包含
Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复。
Devops海洋的渔夫
2019/12/24
1.1K1
Flask 模板 - 宏、继承、包含
Jinja2用法总结
渲染模版时有两种传递参数的方式:用 var='value' 传递一个参数;使用字典组织多个参数,并且加两个*号转换成关键字参数传入。
步履不停凡
2019/09/11
2.2K0
python flask 的分页使用
flask-sqlalchemy 的分页参考文档 http://www.pythondoc.com/flask-sqlalchemy/api.html#id1
py3study
2020/01/07
1.2K0
Flask 入门系列教程(四)
在 WEB 应用当中,表单是和用户交互的最常见的方式之一,学习好表单,是非常重要的,用户登录注册、撰写文章等等操作都离不开表单的功能。表单的处理并不简单,除了要创建表单,还需要做相关的验证,还有错误提示等等。这些操作如果都从头开始编写,那么就太复杂了,不过幸运的是,我们有强大的 WTForms 帮助我们解决。
周萝卜
2020/10/10
1.4K0
Flask 入门系列教程(四)
flask框架(二)
设置cookie:response.set_cookie(key,value,max_age)
小闫同学啊
2019/07/18
1.2K0
flask框架(二)
python学习笔记(三)-表单处理
表单类 默认情况下,Flask-WTF能保护所有表单免受跨站请求伪造攻击(CSRF)
py3study
2020/01/08
7980
Python Web - Flask笔记3
if条件判断语句必须放在{% if statement %}中间,并且还必须有结束的标签{% endif %}。和python中的类似,可以使用>,<,<=,>=,==,!=来进行判断,也可以通过and,or,not,()来进行逻辑合并操作。
YingJoy_
2018/08/02
8040
flask 页面消息提醒flash
//flash {% for message in get_flashed_messages() %} <div class="alert alert-warning"> <button type="button" class="close" data-dismiss="alert">×</button> {{ message }} </div> {% endfor %}
用户5760343
2019/07/07
1.1K0
Flask 学习篇二:学习Flask过程中的记录
Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Application and Request Context(上下文) 在Flask 中,一般一个view function(视图函数)会处理一个请求 Flask 中提供request context.保证全局只有一个线程的request,而不会同时出现两个request. Application and Request Context 一共有四种
ShenduCC
2018/04/27
1.7K0
flask 模板获取静态文件(flask 17)
{% macro static_file(type, filename_or_url, local=True) %} {% if local -%} {% set filename_or_url = url_for('static', filename=filename_or_url) %} {%- endif %} {% if type == 'css' -%} <link rel="stylesheet" href="{{ filename_or_url }}" type="text/css"> {%- elif type == 'js' -%} <script type="text/javascript" src="{{ filename_or_url }}"></script> {%- elif type == 'icon' -%} <link rel="icon" href="{{ filename_or_url }}"> {%- endif %} {% endmacro %}
用户5760343
2019/08/13
6870
Flask学习笔记-在Bootstrap框架下Web表单WTF的使用 顶
表单的处理一般都比较繁琐和枯燥,如果想简单的使用表单就可以使用Flask-WTF插件,同时我们把WTF融合到Bootstrap中这样样式的问题都自动解决了,本篇文章就为您讲解这些内容。
bdcn
2018/09/12
1.9K0
Flask学习笔记-在Bootstrap框架下Web表单WTF的使用
                                                    顶
python flask web开发实战 页面消息提醒 常用
from flask import Flask, render_template, session, redirect, url_for, flash @app.route('/', methods=['GET', 'POST']) def index(): form = NameForm() if form.validate_on_submit(): old_name = session.get('name') if old_name is not None and old_name != form.name.data: flash('Looks like you have changed your name!') session['name'] = form.name.data return redirect(url_for('index')) return render_template('index.html',form = form, name = session.get('name'))
用户5760343
2019/07/05
1.1K0
python flask web开发实战  页面消息提醒 常用
慕课网Flask高级编程实战-7.静态文件、模板、消息闪现与Jinja2
Flask访问静态文件非常简单,只需要在项目根目录建立static文件夹。将静态资源文件放入static下即可。访问的时候访问http://ip:port/static/fileName即可。
Meet相识
2018/09/12
9530
慕课网Flask高级编程实战-7.静态文件、模板、消息闪现与Jinja2
flask 登录/注册表单(flask 20)
from flask import Flask,flash,redirect,render_template,url_for import os from form import LoginForm,RegisterForm
用户5760343
2019/08/13
9860
经验拾忆(纯手工)=> Flask框架
Sanic 和 Flask 简要概述 """ Flask常用 Sanic和Flask很像,于是按着Sanic官方文档学了一下,对比Flask学习并做下笔记,回顾一下 """ Flask:轻量级Web框架,三方组件齐全,用时安装,扩展灵活度高。 Sanic: 和Flask特别像,基础语法,基础命名特别相似(使用几乎差不多)。 Sanic是基于Uvloop(没用过,了解即可,windows不支持)实现, 具有 异步-非阻塞的特性 (网上也有说Sanic可以通
py3study
2020/01/03
1.1K0
Flask框架重点知识总结回顾
重点掌握第1种,在工作中,我们的项目在启动的时候,需要预先设置一些配置信息,为了方便管理,便于维护,我们将所有的配置信息,封装在一个类中,然后再进行使用,下面是代码的实现过程,大家可以看一下:
小闫同学啊
2019/07/18
1.2K0
Flask框架重点知识总结回顾
带你认识 flask web 表单
我将使用Flask-WTF插件来处理本应用中的Web表单,它对WTForms进行了浅层次的封装以便和Flask完美结合。这是本应用引入的第一个Flask插件,但绝不是最后一个。插件是Flask生态中的举足轻重的一部分,Flask故意设计为只包含核心功能以保持代码的整洁,并暴露接口以对接解决不同问题的插件。
公众号---人生代码
2019/11/09
2.4K0
带你认识 flask web 表单
相关推荐
flask框架(二)配套代码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验