Flask博客实战实现全站导航菜单及首页数据展示
Flask上下文处理器
我们博客的设计是全站顶部菜单为通用菜单,调用的数据为文章的分类,那么如何将文章分类数据传递到每个页面的上下文呢?
为了将新变量自动注入模板的上下文中,Flask 中存在上下文处理器context_processor。上下文处理器在呈现模板之前运行,并且能够将新值注入模板上下文。上下文处理器是返回字典的函数。然后,对于应用程序中的所有模板,此字典的键和值将与模板上下文合并:
用法如下所示,这只是一个例子: @app.context_processor def inject_user(): return dict(user=g.user)
上面的上下文处理器是一个名为 user 的变量在模板中可用,其值为 g.user。这个例子不是很有趣,因为g无论如何都可以在模板中使用,但它给出了它是如何工作的。
变量不限于值;上下文处理器还可以使函数可用于模板(因为Python允许传递函数): @app.context_processor def utility_processor(): def format_price(amount, currency=" "): return f"{amount:.2f}{currency}" return dict(format_price=format_price)
上面的上下文处理器使format_price函数可用于所有模板: {{ format_price(0.33) }}
您还可以将format_price构建为模板筛选器,但这演示了如何在上下文处理器中传递函数。 实现全站导航功能
知道了上下文处理器的用法,实现这个功能就非常简单了!
在RealProject目录的__init__.py中插入如下一个上下文回调函数 def inject_category(): # 上下文处理器回调函数 """ context_processor上下文处理器在呈现模板之前运行,并且能够将新值注入模板上下文。上下文处理器是返回字典的函数。 然后,对于应用程序中的所有模板,此字典的键和值将与模板上下文合并: """ from app.blog.models import Category categorys = Category.query.limit(6).all() return dict(categorys=categorys)
这个函数通过limit()方法查询出前6个数据,并通过一个字典返回,之后我们还需要将该回调函数注册到app的工厂函数当中! def create_app(test_config=None): app = Flask(__name__, instance_relative_config=True) # 省略部分代码 # 全局上下文 app.context_processor(inject_category) return app
在app/blog/templates/base.html中循环查出我们返回的数据即可 {% block navbar %} 首页 {% for cate in categorys %} {{ cate.name }} {% endfor %} {% endblock navbar %} 实现首页视图数据
在app/blog/views.py文件中的index首页视图函数中实现 def index(): """首页视图 """ page = request.args.get("page", 1, type=int) pagination = Post.query.order_by(-Post.add_date).paginate(page, per_page=9, error_out=False) post_list = pagination.items import random imgs = ["图一url", "图二url", "图三url"] for post in post_list: post.img = random.sample(imgs, 1)[0] # post.img = random.choice(imgs) return render_template("index.html", posts=post_list, pagination=pagination)
这个视图函数中的查询逻辑在实现文章管理的时候已经实现过,这里唯一不同的区别就是我给这个返回数据新增了一个img的属性,因为在数据库我们没有设计文章形象图字段,我们用这种方式弥补,在imgs的列表中预设一些图片的url地址,之后随机抽取一个赋值给img属性,这样在模板中直接调用这个img属性就会获取到图片的url!
在app/blog/templates/base.html中替换相关循环数据 {% for post in posts %} {{ post.title }}
{{ post.desc }} {% endfor %} 最终效果:
现代中国人能买得起泰坦尼克号的票吗?电影和照片经常展示头等舱的样子,有钱人的地方。因此,泰坦尼克号给人的印象是一座豪华的漂浮宫殿。但乘客的收入各不相同,几乎每个人都能在这艘传奇的船上找到一席之地。让我们看看今天不同舱
到福建必吃的满煎糕,咬开全是料,10元每盒一天200锅不够卖到福建必吃的满煎糕,咬开全是料,10元每盒一天200锅不够卖。今天是三伏天的入伏,也代表着一年中最热的时刻到来,7月份作为暑假,自然是很多人出去旅游的时候,而在这炎热的夏季,首当其
花100元人民币,在缅甸能享受到什么服务?虽然现如今多数国人们的生活质量都发生了翻天覆地的变化,但多数国人们的精神世界却极度地空虚。(此处已添加小程序,请到今日头条客户端查看)为了丰富自身的精神世界,现如今多数国人们在假期
关西10日暴走赏枫装文青万字长文多图杀猫(三)前情回顾十年前的日本自由行是什么样?关西10日暴走赏枫装文青万字长文多图杀猫(二)不甘于被国内某些OTA蒙骗,以下总结来自于一个纯种金牛座的叨叨去哪里预定酒店?通过旅行社适用于找不
夏季炎热,为什么急性心肌梗死易发,该如何预防?第一血液黏稠夏天气温高易出汗没有及时补充水分,那么体内的有效循环血容量就会下降,导致血液浓缩粘稠,容易形成血栓,血栓阻塞在心脏就会形成心梗。第二心脏缺氧气温高,湿度比较大,气压低,
伏天养生,牢记两忌三宜烈日炎炎,整个人蔫蔫的,没有食欲,没有胃口,怎么吃出健康?有了这些小秘诀,帮您度过轻松一夏。01hr忌大鱼大肉天气一热,吃东西就没什么胃口。总想着撸串喝酒,吃些重口味的食物,刺激味
风热感冒炎炎夏日,热浪滚滚,40左右的高温下,我们被热的像热锅上的蚂蚁。为了缓解高温带来的不适感,几乎每家每户室内都开着空调,这与外面炎热的天气形成了巨大的温差。在室外高温区活动后大汗淋漓
中医名方柴胡疏肝散,疏肝理气行气止痛,可治疗乳腺增生方剂名称柴胡疏肝散方剂组成柴胡,白芍,枳壳,甘草,陈皮,香附,川芎,郁金,青皮,浙贝母,橘核随症加减乳房疼痛剧烈者,加延胡索川楝子乳房肿块质地偏软者,加桔梗皂角刺偏硬者加莪术三棱烦
关于夏天喝牛奶你应该知道的那些事?夏日炎炎,透蓝的天空,小鸟不知躲藏到什么地方去了草木都低垂着头。今年夏天,热得让人走在街上,就像进了蒸汽浴室一样难熬。牛奶是一种天然的饮品,营养成分相当的高。那么,喝牛奶有哪些好处
大米长虫了还能吃吗?怎么识别陈米?吃米无小事,一文讲清俗话说民以食为天,而食又以米为主。可以说,大米的品质与我们的健康息息相关。而这些年,关于大米的各种传言真不少。接下来就说说大家最关心的三个大米问题,看完安心吃米长了虫的大米,还能吃
应酬太多不喝不行?一文告诉你不想痛风该怎么喝健康真知计划人到中年,想清心寡欲的养生,但是频繁的应酬推脱不得?觥筹交错中人际交往,晚上回到家却提心吊胆地担心痛风突发,到底咋办,酒不喝不行,喝了回头受苦的又是自己,男人真难!喝酒
火箭暗度陈仓?有意为之?史密斯会是状元?火箭一定会选择班切罗?在大家都在猜测时,魔术的突然改变,打乱了所有人的幻想!其实火箭最钟意的不是班切罗,而是贾巴里史密斯!!!一切表象都是做给魔术看的???今年选秀
静雨谈NBA75大保罗安东尼名不副实,浓眉哥和利拉德毫无建树静雨认为霍华德换保罗,麦迪换安东尼,吉诺比利换浓眉哥,利拉德换维金斯!静雨给出他的理由保罗生涯没有什么成绩,单荣誉来讲,霍华德要高于保罗!霍华德的防守能力,个人实力可以从远古时代打
夺冠之后库里历史地位能上升到什么层次?能超越詹姆斯吗?对于库里,我不想用什么MVPFMVP这样的数字模式来形容他的历史地位,这是对他的不尊重。在我看来,库里在NBA的地位是划时代的,不仅是他赢得的冠军数量,而是他打球的技术风格和先创之
本赛季中超联赛比较实用性的超级外援还有那些比较牛第一位费莱尼,尽管受伤病困扰的山东空霸外援费莱尼状态还不是很好,还需要比赛去调整,郝伟也不敢让他打满全场,但是只要他一上场就会成为对手的噩梦,不可思议的泰山压顶的头球总是帮助泰山队
100!红魔全额承担当地时间6月23日,TheAthletic报道,升班马诺丁汉森林同意租借曼联门将迪恩亨德森,两家俱乐部已经完全达成协议。迪恩亨德森将租借效力诺丁汉森林至2023年6月30日,根据协
NBA一夜8大交易动态!独行侠火箭官宣交易!欧文下家只剩湖人北京时间6月25日,2022年NBA选秀大会已经结束,今日有不少交易签约动态,让我们来汇总下1,欧文潜在下家纷纷出局仅剩湖人对他真心实意据著名NBA记者沃神报道,目前只剩湖人在追求
待播剧长月烬明主演罗云熙白鹿继半是蜜糖半是伤后二搭电视剧长月烬明主演罗云熙白鹿邓为陈都灵,改编自藤萝为枝的小说,讲述了掌门之女黎苏苏与魔神澹台烬的爱恨情仇,整部剧的造型我都好喜欢。可以说是相当期待了。该剧将在优酷宠爱剧场播出,具体
浪姐3,为什么谭维维会成为除那英,宁静外资历最老的队长?算上第3次公演,谭维维在浪姐3已经连续3次当选队长了,是除那英,宁静两大师姐外,资历最老的队长。那为什么谭维维会成为那么让人信服,舞台表现力那么之好的队长呢?究其原因还是因为谭维维
辽篮开始行动,或引进强力小外援,送走刘志轩却让廉明发怒了辽篮开始行动,或引进强力小外援,送走刘志轩却让廉明发怒了弹指一挥间,休赛期就过去一个月了,如果从队伍调整和球员流动这一点来看,辽宁男篮行动还是比较缓慢,但是往往此地无声胜有声,没有
尤文巴黎马竞罗马最新转会消息1尤文图斯阿德里安拉比奥特据悉,意甲豪门尤文图斯的阿德里安拉比奥特今夏想要离开,该球员今年27岁,与球队还有一年合同。拉比奥特在尤文的表现比较挣扎,低于人们的预期,导致其在队内地位
教你翡翠手镯怎么选圈口?翡翠手镯怎么选圈口(镯子圈口对照表)?手镯是腕间最美的风情,不管是银手镯还是金手镯,都有着独特的魅力。当然翡翠手镯更是价值不菲,选择起来也需要更加谨慎。翡翠手镯怎么选圈口1软尺测量