context_processor 上下文处理器
2024-09-07 09:35:14
context_processor 上下文处理器
博客里面有三个地方用到了标签云:主页面,分类页面,博客详情页面,于是有了下面一段代码
# 主页面
@main.route("/")
def index():
tags = Tag.query.all()
# ...省略部分代码
return render_html("index.html", tags=tags,)
# 分类页面
@main.route("tag/<int:id>")
def tags(id):
tags = Tag.query.all()
# ...省略部分代码
return render_html("tags.html", tags=tags,)
# 博客详情页面
@main.route("post/<int:id>")
def post(id):
tags = Tag.query.all()
# ...省略部分代码
return render_html("post.html", tags=tags,post=post)
好像问题解决了?所有页面都能显示出来标签云了? 但是这三个页面都回传 tags 会不会太难看了一些,完全不优雅了嘛,有没有好的办法呢? 答案自然是有的,接下来就到我们的重点了。
context_processor 闪亮登场
跟我们之前的说到的钩子函数一样,它也有一个兄弟--app_context_processor,区别很简单,后者是针对蓝图的。让我们看一下它的官方定义:
Registers a template context processor function.
翻译过来很简单: 注册模板上下文处理器功能。 这个真能解决我们的问题吗?别着急让我们试一下,把之前的代码改造一下。
@main.app_context_processor
def peach_blog_menu():
tags = Tag.query.all()
return dict(tags=tags)
@main.route("/")
def index():
# ...省略部分代码
return render_html("index.html")
# 分类页面
@main.route("tag/<int:id>")
def tags(id):
# ...省略部分代码
return render_html("tags.html")
# 博客详情页面
@main.route("post/<int:id>")
def post(id):
tags = Tag.query.all()
# ...省略部分代码
return render_html("post.html")
是不是发现什么消失了? tags 好像从之前的几个函数中消失了,没有回传到前台,能访问到吗?自然是可以的。原因自然是 context_processor 了,它可以将我们的定义变量在所有模板中可见。
如何使用呢?
1. 如上述代码那样, context_processor 作为一个装饰器修饰一个函数
2. 函数的返回结果必须是 dict, 然后其 key 将会作为变量在所有模板中可见
当你的很多视图函数中需要回传一个相同的变量的时候,这个时候就可以考虑使用 context_processor 了
最新文章
- ORACLE应用调优:请避免SQL做大量循环逻辑处理
- linux 1-100的累加
- R语言之中文分词:实例
- Codeforces Round #199 (Div. 2)
- shell如何在指定文件的指定位置后面添加内容
- Linux命令 find和mv的结合使用:查找文件,移动到某个目录
- spoj 379
- Objective-C MRC多个对象相互引用的内存管理
- BZOJ 1003 物流运输trans
- 高效的TCP消息发送组件
- letter-spacing+first-letter实现按钮文字隐藏
- java constructor 在构造子类时,一定会调用到父类的构造方法 “ 私有属性被继承了?”问题
- GCD之死锁体会
- socket系列之客户端socket——Socket类
- AAAI2018中的自注意力机制(Self-attention Mechanism)
- 转: ffmpeg循环推流方法
- HDU 4463 Outlets(最小生成树给坐标)
- Python接口自动化--requests 2
- Could not autowire field: private java.lang.Integer com.taotao.sso.service.impl.UserServiceImpl.SSO_
- 【monkeyrunner】浅谈包名和activity名
热门文章
- 二零一八阿里p7笔试116题
- 微软Surface低端版本将问世
- 【Flask+Redis】 python学习第一章 - 7.0 断言 数据库测试 redis学习
- 三星Q470c Logo界面无限掉电重启,变砖后的挽救过程
- n诺挑战赛5题解
- 深入了解jQuery之链式结构
- dpkg: error processing package XXX (--configure) 解决方法 (ubuntu右上角红色警告)
- c#动态调用WEBSERVICE接口
- OSS - 有关于OSSClient的单例化
- Air Raid POJ - 1422 【有向无环图(DAG)的最小路径覆盖【最小不相交路径覆盖】 模板题】