Flask入门-(二)静态模板应用

前言

之前的简单Flask例子中,使用Flask显示了一个最简单的helloworld, 直接返回的是一个字符串。在实际的开发和应用中显然不能满足需求,实际的网页都是由HTML+CSS+JavaScript组成, 因此Flask需要实际的渲染和生成一个HTML界面,在Flask中, HTML文件又称为模板template。

本节的内容: 使用Flask显示一个简单的HTML界面.


测试环境

Ubuntu 20.04
python flask
vscode


关于Flask web开发中的术语简介

刚刚接触web开发之前,笔者对web中涉及的HTML/CSS/JS这些是一头雾水,分不清哪些是程序开发语言,哪些是开发框架。 经过一段时间的学习,浅谈一下笔者对以下内容在Flask中扮演角色的认识:

Item 全称 用途 运行环境
HTML 超文本标记语言 网页内容的显示, 相当于网页的骨架 浏览器渲染
CSS 层叠样式表 网页的布局以及显示格式,比如背景颜色,对齐方式之类 浏览器渲染
JavaScript - 和Java没关系 HTML界面中嵌入的脚本程序,用于网页一些动态效果的控制 浏览器执行,除了浏览器还可以使用nodejs执行
Python 不用说了,大家都知道大蟒蛇 web后台,和数据库打交道 python解释器, 通常使用conda环境

HTML和CSS不算是程序开发的语言, JavsScript是程序开发语言, 类似于经常使用的python/C++/Java一样, JavaScript和Python感觉比较像,都是脚本语言。 由于Flask属于Python web, 因此不会涉及太多的JavaScript。


Flask 渲染HTML模板涉及的内容

  1. render_template()函数
    Flask中关于render_template 函数的介绍:
    • template_name_or_list: 被渲染的模板的名称,一般是待渲染的HTML文件的名称
    • context: key-val迭代器, 传入render_template()函数中的一些字典变量,比如: render_template("index.html", param1=val_1, param2=val_2), 用于向html文件中传入一些动态的变量
def render_template(template_name_or_list, **context):
    """Renders a template from the template folder with the given
    context.

    :param template_name_or_list: the name of the template to be
                                  rendered, or an iterable with template names
                                  the first one existing will be rendered
    :param context: the variables that should be available in the
                    context of the template.
    """

  1. url_for() 函数
def url_for(endpoint, **values):
    """Generates a URL to the given endpoint with the method provided.

    Variable arguments that are unknown to the target endpoint are appended
    to the generated URL as query arguments.  If the value of a query argument
    is ``None``, the whole pair is skipped.  In case blueprints are active
    you can shortcut references to the same blueprint by prefixing the
    local endpoint with a dot (``.``).
  1. Jinja2语法

Jinja2 是 Flask 框架的两大核心(Jinja2 模板引擎和 Werkzeug WSGI 工具集)之一, Jinja2 是 Flask 框架内置的模板语言, 在安装 Flask 框架时,就会默认安装上 Jinja2 模板引擎。

Jinja2用于flask中的html文件, jinja2支持一些python中的语法:

  • for循环
  • if, if-else
  • import
  • include
  • val 变量显示
  • block 代码块
  • extend 模板继承

VSCode提供了对flask, Jinja2支持的插件:


image.png

测试工程

demo1 --- 使用HTML显示一首诗

工程文件目录组织

image.png

为了在Flask中显示HTML, 需要添加以下文件:
static: 包含css和js文件夹, 分别存放css文件以及javascript代码文件
templates: 存放HTML文件

代码介绍

  • app.py
    需要在python flask中倒入函数 —— render_template, render_template() 函数输入为HTML文件,返回为包含HTML文件的响应。
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')
  • index.html
    为了使得显示效果更好, 在html的 head标签中引入了css文件, 这里使用了Flask提供的函数 url_for() 用于查找和定位css文件。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flask_demo</title>
    <link rel="stylesheet" href="{{url_for('static', filename='css/style.css')}}">
</head>
<body>
    <p id="content">
        <b>将进酒·君不见黄河之水天上来</b> <br> <br>
        [唐] 李白 <br> <br>
        君不见黄河之水天上来,奔流到海不复回。<br>
        君不见高堂明镜悲白发,朝如青丝暮成雪。<br>
        人生得意须尽欢,莫使金樽空对月。<br>
        天生我材必有用,千金散尽还复来。<br>
        烹羊宰牛且为乐,会须一饮三百杯。<br>
        岑夫子,丹丘生,将进酒,杯莫停。<br>
        与君歌一曲,请君为我倾耳听。<br>
        钟鼓馔玉不足贵,但愿长醉不复醒。<br>
        古来圣贤皆寂寞,惟有饮者留其名。<br>
        陈王昔时宴平乐,斗酒十千恣欢谑。<br>
        主人何为言少钱,径须沽取对君酌。<br>
        五花马,千金裘,<br>
        呼儿将出换美酒,与尔同销万古愁。
    </p>
</body>
</html>

  • style.css文件
    这个css很简单, #{element}代表id选择器(CSS,HTML内容,不属于flask)
#content {
    text-align: center;
}

运行: flask run
运行效果:

image.png

在浏览器上, 按F12 进入开发模式,观察渲染之后的HTML文件:

image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容