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.filters
def 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内容随便设置一个字符串都行.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义