Flask狼书笔记 | 03_模板

请添加图片描述

文章目录

  • 3 模板
    • 3.1 模板基本使用
    • 3.2 模板结构组织
    • 3.3 模板进阶


3 模板

模板(template):包含固定内容和动态部分的可重用文件。Jinja2模板引擎可用于任何纯文本文件。

3.1 模板基本使用

HTML实体:https://dev.w3.org/html5/html-author/charref

Jinja2定界符

  • 语句:{% ... %}
  • 表达式:{{ ... }}
  • 注释:{# ... #}

:适度使用模板,仅放和输出控制有关的逻辑操作。

补充render_template()中,也可以传入python函数,并在模板中调用。

上下文

  • 在模板中定义变量:使用set标签。(p80)
  • 内置上下文变量:config,request,session,g。
  • 自定义上下文@app.context_processor ,等(p81)

全局对象

  • Flask内置模板全局函数url_for()用于生产URL,get_flashed_messages()用于获取flask消息。

自定义全局函数@app.template_global()装饰器

过滤器修改过滤变量值的特殊函数。

{{ name|title }}
{% filter upper %}This itext becomes upperase.
{% endfilter %}

Jinja2常用内置过滤器(p83)

  • 自定义过滤器@app.emplate_filter()

测试器:测试变量或表达式,返回布尔值 ,使用@app.template_test()自定义。

{% if foo is sameas(bar) %}...

模板环境对象:控制渲染行为,包含配置选项、上下文变量、全局函数(globals)、过滤器(filters)、测试器(tests),在app.jinja_env属性。

# 添加自定义全局对象 
def bar():return 'I am bar.'app.jinja_env.globals['bar'] = bar

3.2 模板结构组织

局部模板:减少代码重复。在ajax请求中可以只返回一个局部模板,而不是整个页面。

{% include '_banner.html' %}

:(macro)类似函数,也为了代码重用。

  • 注意include会自动传递上下文;而import不会,需要显示传递。
{% from 'macros.html' import qux with context%}
...
{{ qux(amount=5) }}

模板继承:在基模板中定义基本的HTML结构,而子模板只需要对特定的块进行修改(覆盖或追加{{ super() }})。(p90)

{% extends 'base.html' %}
{% block content %}
...
{% endblock content %}

3.3 模板进阶

空白控制:模板中的Jinja2语句会保留移除后的空行,但不影响浏览器的解析。可以使用工具去除空白,减小文件体积,提高数据传输速度。

{%- endif %}

加载静态文件:默认存放在主脚本同级目录的static文件夹中,使用url_for()函数获取。Flask内置了用于获取静态文件的视图函数,端点值为static

{{ url_for('static', filename='avatar.jpg') }}
  • Favicon:浏览器在标签页、地址栏、收藏夹等处显示的小图标。(p96)
  • CDN加载静态资源更方便
  • 可以创建一个专门用于加载静态资源的

疑惑:对favicon的请求是自动的吗,所有项目都有?

消息闪现:在视图函数调用flash()函数,你的消息将存储在session中,然后再模板中使用全局函数get_flashed_messages()获取消息并显示,调用后会清空session中的消息。

{% for message in get_flashed_messages() %}{{ message }}
{% endfor %}
  • 文本字符串编码问题:(p98)

自定义错误页面:默认的简陋错误页面往往另用户不知所措,我们可以注册错误处理函数来自定义错误页面。

@app.errorhandler(404)
def page_not_found(e):return render_template('errors/404.html'), 404

JavaScript和CSS中的Jinja:有时需要再JavaScript或CSS代码中使用Jinja2提供的变量,如我们希望将用户设置的主题颜色设置到对应的CSS规则中。

  • 只有使用render_template()传入的模板文件才会被渲染,而在javascript、css文件中引入的Jinja2代码不会被执行。(?)

  • 1、嵌入式Javascript/CSS:在模板文件中,使用<style><script>标签定义这部分代码。

  • 2、定义为Javascript/CSS变量

{# 定义JavaScript变量 #}
<script type="text/javascript">var foo = '{{ foo_variable }}';
</script>{# 定义CSS变量 #}
<sytle>
:root {--theme-color: {{ theme_color }};
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/109628.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Ubuntu坏境下的Suricata坏境搭建

目录 Suricata环境安装 第一步、在 Ubuntu 端点安装 Suricata 1、加入Suricata源 2、更新安装包 3、下载SuricataSuricata 第二步、下载并提取新兴威胁 Suricata 规则集 1、在tmp文件夹下载 Suricata 规则集 如果发现未安装curl&#xff0c;使用apt安装即可&#xff1a;…

得帆信息CEO张桐接受21世纪财经深度专访,表示AIGC+低代码将带来生产效率的变革

近日&#xff0c;得帆信息创始人兼CEO张桐接受了21世纪财经深度专访&#xff0c;他表示AIGC低代码的黄金组合&#xff0c;将带来生产效率的变革。 眼下&#xff0c;低代码与AI创新的联接才刚刚开始&#xff0c;也必然会带来生产效率的变革。 在AIGC汹涌的浪潮下&#xff0c;聊…

【软件安装】Python安装详细教程(附安装包)

软件简介 Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计&#xff0c;作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构&#xff0c;还能简单有效地面向对象编程。Python语法和动态类型&#xff0c;以及解释型语言的本质&#xff0c…

机械臂手眼标定ZED相机——眼在手外python、matlab

目录 1.眼在手外原理 2.附上眼在手外求得手眼矩阵的python代码 3.眼在手外标定步骤 1&#xff09;打印棋盘格 2&#xff09;得到hand数据 3&#xff09;得到camera数据 4.运行python得到手眼矩阵 1.眼在手外原理 眼在手外所求的手眼矩阵是基坐标到相机的转换矩阵 2.附上…

springboot服务注册到Eureka,端口总是默认8080,自己配置端口不生效

这段时间接手了一个公司的老项目&#xff0c;用的是SpringCloud&#xff0c;在我用的时候突然发现有一个服务&#xff0c;注册到Eureka后&#xff0c;界面显示的端口和实际Ribbon调用的实例端口是不一致的&#xff0c;后来我自己写了个端口获取了一下所有的实例信息&#xff0c…

门禁系统忘记登入密码,现在更换电脑如何迁移旧电脑门禁系统的数据

环境&#xff1a; ivms-4200 v3.10.0.6_c 问题描述&#xff1a; 门禁系统忘记登入密码,现在更换电脑如何迁移旧电脑门禁系统的数据&#xff0c;旧电脑记住密码&#xff0c;忘了密码和密保了 解决方案&#xff1a; 1.前往海康官网下载4200客户端&#xff0c;在新电脑上安装 …

JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方

一、遇到问题 在 继续更新完善&#xff1a;C 结构体代码转MASM32代码 中&#xff0c;由于结构体成员中可能为数组类型的情况&#xff0c;因此我们在提取结构体成员信息的过程中&#xff0c;需要检测结构体成员名称字符串中是否包括 []&#xff0c;如果包括那么我们要截取[前面…

纸贵科技连续三年蝉联IDC中国 FinTech 50榜单

近日&#xff0c;国际权威市场研究机构IDC公布了“2023 IDC中国FinTech 50榜单”。作为领先的区块链技术和解决方案服务商&#xff0c;纸贵科技凭借过硬的区块链技术和丰富的金融科技创新成果&#xff0c;连续第三年荣登IDC中国FinTech 50榜单。 IDC中国FinTech 50榜单是金融科…

java八股文面试[数据结构]——ConcurrentHashMap原理

HashMap不是线程安全&#xff1a; 在并发环境下&#xff0c;可能会形成环状链表&#xff08;扩容时可能造成&#xff0c;具体原因自行百度google或查看源码分析&#xff09;&#xff0c;导致get操作时&#xff0c;cpu空转&#xff0c;所以&#xff0c;在并发环境中使用HashMap是…

腾讯云coding平台平台inda目录遍历漏洞复现

前言 其实就是一个python的库可以遍历到&#xff0c;并不能遍历到别的路径下&#xff0c;后续可利用性不大&#xff0c;并且目前这个平台私有部署量不多&#xff0c;大多都是用腾讯云在线部署的。 CODING DevOps 是面向软件研发团队的一站式研发协作管理平台&#xff0c;提供…

kafka和消息队列

https://downloads.apache.org/kafka/3.5.1/kafka_2.13-3.5.1.tgz d kafka依赖与zookeeper kakka配置文件 broker.id1 #每个 broker 在集群中的唯一标识&#xff0c;正整数。每个节点不一样 listenersPLAINTEXT://192.168.74.70:9092 ##监听地址 num.network.threads3 #…

“超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、Dolly_v2_3b助您实现更智能的应用!”

“超级AI助手&#xff1a;全新提升&#xff01;中文NLP训练框架&#xff0c;快速上手&#xff0c;海量训练数据&#xff0c;ChatGLM-v2、中文Bloom、Dolly_v2_3b助您实现更智能的应用&#xff01;” 1.简介 目标&#xff1a;基于pytorch、transformers做中文领域的nlp开箱即用…

URI和URL和URN区别

URI、URL 和 URN 是一系列从不同角度来看待资源标识和定位的概念。虽然它们有一些重叠&#xff0c;但每个概念都强调了不同的方面。 URI&#xff08;Uniform Resource Identifier&#xff09;&#xff1a;URI 是一个通用的术语&#xff0c;用于标识和定位资源。它是一个抽象的概…

DockerCompose介绍与使用

DockerCompose介绍与使用 1、DockerCompose介绍 DockerCompose用于定义和运行多容器 Docker 应用程序的工具。 通过 Compose可以使用 YAML 文件来配置应用程序需要的所有服务。一个使用Docker容器的应用&#xff0c;通常由多个容器组成&#xff0c;使用Docker Compose不再需要…

在腾讯云服务器OpenCLoudOS系统中安装Jenkins(有图详解)

Jenkins介绍 Jenkins是一个开源软件项目&#xff0c;是基于java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。 将项目代码的svn地址配置在Jenkins&#xff0c;就可以直接在Je…

原生web实现不固定列数的表格、随机列、document、querySelector、forEach、hasOwnProperty、call、includes

文章目录 效果图公共样式第一种解决方案(不推荐)第二种解决方案(强烈推荐) 效果图 公共样式 .d_f {display: flex; }.flex_1 {flex: 1; }.jc_sb {justify-content: space-between; }.ai_c {align-items: center; }.bc_ccc {background-color: #cccccc; }/* ------------paddin…

Docker容器中的Postgresql备份脚本异常解决办法

本文基于K8S中Docker容器对postgres数据库进行备份的操作&#xff0c;编写好脚本后&#xff0c;手动执行脚本是正常的&#xff0c;但是crontab定时实行却报错&#xff0c;报错信息为kubectl command not found&#xff0c;提示没有找到kubectl指令。 本文主要介绍对该报错信息…

m4s格式转换mp4

先安装 ffmpeg&#xff0c;具体从官网可以查到&#xff0c;https://ffmpeg.org&#xff0c;按流程走。 转换代码如下&#xff0c;可以任意选择格式导出 import subprocess import osdef merge_audio_video(input_audio_path, input_video_path, output_mp4_path):# 构建 FFmpe…

大数据处理平台的架构演进:从批处理到实时流处理

文章目录 批处理架构&#xff1a;实时流处理架构&#xff1a;混合架构&#xff1a; &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;大数据系列 ✨文章内容&#xff1a;大数…

CTF-XXE(持续更新,欢迎分享更多相关知识点的题目)

知识 实例 BUU [PHP]XXE 进来看到 然后一起看 Write BUU XXE COURSE 1 进来看到 一起看 write NSS [NCTF2019]Fake XML cookbook 反正是XXE 直接整 write [NCTF 2019]True XML cookbook 不整花里胡哨&#xff0c;解题在最下面 write 与博主不同&#xff0c;我通过…