当前位置:网站首页>【Flask】静态文件与模板渲染
【Flask】静态文件与模板渲染
2022-07-06 01:26:00 【科皮子菊】
前序文章:
Flask启程与实现一个基于Flask的最小应用程序
静态文件Static Files
静态文件主要是web应用中会使用一些图片,css文件,js文件等去实现一个优雅的网页。这也是动态网站不可或缺的内容。那么Flask会为你解决它。
用Flask文档来说: Just create a folder called static in your package or next to your module and it will be available at /static
on the application. 也就是说,在项目路径中创建static文件夹,或者在模块同一级创建/static
文件夹即可,flask会在这些路径去寻找静态文件内容。
静态文件在系统中也是会有一个路径,假如应用中有个static/style.css
的文件。 那么就可以使用如下方式去定位:
url_for('static', filename='style.css')
模板渲染Rendering Templates
如果使用Python去通过字符串拼接等等方式去构建一个HTML页面,恐怕会把人累死。除此之外,你还不得不考虑注入攻击等。有了这个需求后,就出现了一个模板引擎的概念,通俗的说:这个玩意能够在页面端将html代码以及flask应用返回的数据进行动态整合,然后渲染成html代码在浏览器端展示。如果了解过Java中JSP、Thymeleaf应该就懂了。Flask默认使用到模板渲染引擎是Jinja2.
渲染一个模板(一个html)使用的是render_template()
方法。那么我们所要做的就是提供模板的名称和要作为关键字参数传递给模板引擎的变量。下面是一个如何渲染模板的简单示例:
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
Flask将会从templates
文件夹中查找对应的文件,这个templates
存放地址与static
类似。可以参考如下理解:
- 模块
/application.py /templates /hello.html
- 包
/application
/__init__.py
/templates
/hello.html
那么对于模板,我们可以使用 Jinja2 模板的全部功能。这也不得不去了解一下Jinja2的文档了:Jinja2.
下面就是一个模板使用案例:
<!doctype html>
<title>Hello from Flask</title>
{
% if name %}
<h1>Hello {
{
name }}!</h1>
{
% else %}
<h1>Hello, World!</h1>
{
% endif %}
在模板中,我们还可以访问 config、request、session 和 g 这些对象以及 url_for()
和 get_flashed_messages()
函数。这些是什么玩意后面再继续介绍,总之可以在模板里直接使用。
一些页面有公共的部分,如页眉、导航和页脚,如果能够把公共的部分放到一个模板里,其他的模板能够简单复用就好了。这就是模板的继承(inheritance)。这个是需要深入了解的,可以参考官方。
启用了自动转义,因此如果name
包含 HTML,它将自动转义。如果我们可以信任一个变量并且知道它是安全的 HTML(例如,因为它来自将 wiki 标记转换为 HTML 的模块),我们可以使用 Markup
类或使用 | safe
过滤器将其标记为安全模板。
Markup
类使用的简单介绍:
from markupsafe import MarkUp
print(Markup('<strong>Hello %s!</strong>') % '<blink>hacker</blink>')
# Markup('<strong>Hello <blink>hacker</blink>!</strong>')
print(Markup.escape('<blink>hacker</blink>'))
# Markup('<blink>hacker</blink>')
print(Markup('<em>Marked up</em> » HTML').striptags())
# Marked up » HTML
总结
好了,今天就了解这么多了。去看看论文咯。
边栏推荐
- 伦敦银走势中的假突破
- JMeter BeanShell的基本用法 一下语法只能在beanshell中使用
- 3D视觉——4.手势识别(Gesture Recognition)入门——使用MediaPipe含单帧(Singel Frame)和实时视频(Real-Time Video)
- Unity VR resource flash surface in scene
- [技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览
- Three methods of script about login and cookies
- Xunrui CMS plug-in automatically collects fake original free plug-ins
- leetcode刷题_反转字符串中的元音字母
- Condition and AQS principle
- Five challenges of ads-npu chip architecture design
猜你喜欢
MATLB | real time opportunity constrained decision making and its application in power system
[机缘参悟-39]:鬼谷子-第五飞箝篇 - 警示之二:赞美的六种类型,谨防享受赞美快感如同鱼儿享受诱饵。
3D vision - 4 Getting started with gesture recognition - using mediapipe includes single frame and real time video
ThreeDPoseTracker项目解析
Folio.ink 免费、快速、易用的图片分享工具
2020.2.13
[pat (basic level) practice] - [simple mathematics] 1062 simplest fraction
Recursive method to realize the insertion operation in binary search tree
Docker compose配置MySQL并实现远程连接
Ordinary people end up in Global trade, and a new round of structural opportunities emerge
随机推荐
【详细】快速实现对象映射的几种方式
Finding the nearest common ancestor of binary tree by recursion
servlet(1)
一图看懂!为什么学校教了你Coding但还是不会的原因...
General operation method of spot Silver
ADS-NPU芯片架构设计的五大挑战
The basic usage of JMeter BeanShell. The following syntax can only be used in BeanShell
Leetcode 208. Implement trie (prefix tree)
leetcode刷题_平方数之和
False breakthroughs in the trend of London Silver
Unity VR resource flash surface in scene
How to get the PHP version- How to get the PHP Version?
Finding the nearest common ancestor of binary search tree by recursion
晶振是如何起振的?
Docker compose configures MySQL and realizes remote connection
[le plus complet du réseau] | interprétation complète de MySQL explicite
Remember that a version of @nestjs/typeorm^8.1.4 cannot be obtained Env option problem
JMeter BeanShell的基本用法 一下语法只能在beanshell中使用
Basic process and testing idea of interface automation
[技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览