flask前端套用网页模板(flask web开发实战)
Flask博客实战 - 实现全站导航菜单及首页数据展示
我们博客的设计是全站顶部菜单为通用菜单,调用的数据为文章的分类,那么如何将文章分类数据传递到每个页面的上下文呢?
为了将新变量自动注入模板的上下文中,Flask 中存在上下文处理器context_processor。上下文处理器在呈现模板之前运行,并且能够将新值注入模板上下文。上下文处理器是返回字典的函数。然后,对于应用程序中的所有模板,此字典的键和值将与模板上下文合并:
用法如下所示,这只是一个例子:
上面的上下文处理器是一个名为 user 的变量在模板中可用,其值为 g.user。这个例子不是很有趣,因为g无论如何都可以在模板中使用,但它给出了它是如何工作的。
变量不限于值;上下文处理器还可以使函数可用于模板(因为Python允许传递函数):
上面的上下文处理器使format_price函数可用于所有模板:
您还可以将format_price构建为模板筛选器,但这演示了如何在上下文处理器中传递函数。
知道了上下文处理器的用法,实现这个功能就非常简单了!
在RealProject目录的__init__.py中插入如下一个上下文回调函数
这个函数通过limit()方法查询出前6个数据,并通过一个字典返回,之后我们还需要将该回调函数注册到app的工厂函数当中!
在app/blog/templates/base.html中循环查出我们返回的数据即可
在app/blog/views.py文件中的index首页视图函数中实现
这个视图函数中的查询逻辑在实现文章管理的时候已经实现过,这里唯一不同的区别就是我给这个返回数据新增了一个img的属性,因为在数据库我们没有设计文章形象图字段,我们用这种方式弥补,在imgs的列表中预设一些图片的url地址,之后随机抽取一个赋值给img属性,这样在模板中直接调用这个img属性就会获取到图片的url!
在app/blog/templates/base.html中替换相关循环数据
flask里面怎么嵌套html
可以向模板(template)传递多个参数或者把全部的本地参数传递给template:1.传递多个参数给template,直接将参数放在render_template()函数里面,参数间用逗号隔开:@app.route('/')defindex():content='..'user='Micheal'returnrender_template('index.html',var1=content,var2=user)template中可以直接使用{{var1}}和{{var2}}直接操作变量。2.传递全部的本地变量给template,使用**locals():@app.route('/')defindex():content='..'user='Micheal'returnrender_template('index.html',**locals())template中可以直接使用{{content}}和{{user}}直接操作变量。
使用flask进行前端后台的数据交互
flask是一个轻量级的web框架,下面整理讲一下如何使用
其实步骤很简单
1,初始化
app = Flask( name ),创建flask对象app,flask类的构造器必须指定的参数,如果是model的话,括号里就放model名,如果是单独应用可以使用 name 。
在初始化之后,用config.update或者.debug两种方式来定义是否debug的参数。线上程序为了安全需将这个参数设置为false,也就是不让debug
2,路由
通过装饰器的方式将我们的方法转换为路由,具体方法如下:
3,前后端的交互方式
方式一:前端发送,后端接收
前端通过ajax或者form的submit来生成后端所需要的内容(ajax看上一页)
后端通过request.form来获取前端post的参数
方式二:后端发送,前端接收
后端通过模版引擎render_template来进行交互
后端通过return render_template(’hello.html’, name=name)来向hello.html页面进行name的传递
Html页面放的地址必须在templates文件夹下。
前端获取方式:
{% if name %}
h1Hello {{ name }}!/h1