• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Yancy00

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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内容随便设置一个字符串都行.

posted on 2023-03-18 10:10  Yancy00  阅读(274)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3