flask-JinJa2上全局下文变量函数
JinJa2内置全局变量
全局上下文变量可以在所有模板中直接被调用.
- g 当前请求中多个地方需要用到的变量
- request 当前请求对象.通过他可以获取请求的详细信息.
- session 当前请求的session对象.
- config 项目配置文件对象.
自定义模板全局变量
比如用户登陆信息.多个页面需要用到.
# app.py
# 自定义的上下文处理函数中.变量需要放到字典中返回给页面,才能被JinJa模板页面使用.
@app.context_processor
def context_user():
    user={'name':'admin','level':2}
    return {'user':user}
xx.html
{{user.name}},{{user.level}}
JinJa2内置全局函数
内置全局函数在所有模板中可以被直接调用
range() 获取一个等差数列
lipsum() ?
dict()  转为字典
此外还有三个全局类.cycler,joiner,namespace
flask提供的全局函数:
url_for() 获取静态文件 url_for('static',filename='xxx')
get_fleshed_messages()  获取闪现消息
自定义模板全局函数
如果需要自定义模板全局函数.就用app.template_global()装饰器来实现
@app.template_global()  #注意这里装饰器有括号
def greeting(name):
	return   f'欢迎{name}!'
<h1> {{greeting("John")}} </h1>  <!--调用时要用双大括号-->
输出结果: 欢迎John!
补充
- 
flask项目中用app.jinja_env来配置模板. 
 示例:关闭模板全局转义app.jinja_env.autoescape=False
 示例:添加过滤器app.jinja_env.filtersdef myadd(a,b): return a+b app.jinja_env.filters['myadd']=myadd示例:添加全局对象 app.jinja_env.globals['user']=user
 示例:添加测试器def is_admin(user): if user.role=='admin': return True else: return false app.jinjia_env.tests['isadmin']=is_admin #注意这里只写函数名
- 
闪现消息 
 使用闪现消息需要先在视图函数中通过flash()函数提交闪现消息内容.
 然后在模板页面根据需要显示闪现消息.get_flashed_message()@app.route('/flash/msg') def my_flash_msg(): flash('hello?') #存消息 flash('nice to meet you1') return render_template('flashed_msg.html')<body> <ul> {% for msg in get_flashed_messages() %} <li>{{msg}}</li> <!--取消息--> {% endfor %} </ul> </body>闪现消息本质是存储在session中. 
 所以在使用session之前必须在config中设置SECRECT_KEY.
 SECRECT_KEY内容随便设置一个字符串都行.
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号