flask web学习之模板(二)

这篇具有很好参考价值的文章主要介绍了flask web学习之模板(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、模板结构组织

1.1 局部模板

当多个独立模板中都会使用同一块HTML代码时,我们可以把这部分代码抽离出来,存储到局部模板中。这样,既可以避免重复,也可以方便统一管理。

{% include '_banner.html' %}  # 为了和普通模板分开,局部模板的命名通常都以一个下划线开始
1.2 宏

宏是Jinja2提供的一个非常有用的特性,它类似Python的函数。使用宏可以把一部分代码封装到宏里,通过传递的参数来构建内容,最后渲染。

_macros.html
# 在创建宏时,使用macro与endmaccro标签来声明宏。
{ % macro qux(amount) = 1 %}
	{% if amount == 1 %}
		I am a boy.
	{% elif amount >1 %}
		I am a girl.
	{% endif %}
{%% endmacro %}

使用时,像Python中导入函数一样导入。

{% from '_macros.html' import qux %}
....
{{qux(amount=5)}}

另外在使用宏的时候要注意上下文问题。出于性能的考虑,并且为了让这一切保持显式,默认情况下include一个模板时会传递上下文到局部模板中,但import不会。所以我们需要导入时显式的使用with context来声明传入当前模板的上下文。

1.3 模板继承

Jinja2允许你定义一个基本模板,把网页上的导航栏、页脚等通用内容放在基模板中,而每一个继承模板的子模板都会在渲染时自动包含这些部分。
基模板 base.html

<!DOCTYPE html>
<html>
<head>
	{% block head %}
		<meta charset="utf-8">
		<title>{% block title %} 基模板 {% endblock %}</title>
		{% block style %}{% endblock %}
	{% endblock %}
</head>
<body>

	<header>
		<!-- 网站头部内容 -->
	</header>

	<nav>
		<!-- 网站导航栏内容 -->
	</nav>

	<main>
		<!-- 网站主要内容 -->
		{% block content %}{% endblock %}
	</main>

	<footer>
		<!-- 网站页脚内容 -->
		{% block footer %}
		...
		{% endblock %}
	</footer>

	{% block scripts %}{% endblock %}
</body>
</html>

基本模板中块的开始和技术分别使用block和endblock标签俩声明,并且块与块之间可以嵌套。我们只需要在子模板中定义同名的快来执行继承操作。
子模板 index.html

{% extends 'base.html' %}
{from 'macros.html' import qux %}

{% block content %}
{% set name = 'baz' %}
<h1>sdad</h1>
<li>macro:{{ qux{amount=5) )} </li>
{% endblock %}

在子模块中,可以对父模块中的块执行两种操作:

  • 覆盖内容:创建同名模块即可。
  • 追加内容:需要使用super()函数进行声明。
# 追加内容至base.html 的styles模块
{% block styles %}
{{ super() }}
<style>
	.foo{
		color: #FFF;
	}
</style>
{% endblock %}

二、模板进阶

2.1 空白控制
  • 如果想在渲染时去掉模板中的空行,可以在定界符内添加减号。
<div>
{% if True -%}
	<p>Hello!</p>
{%- endif %}
  • 还有一种办法是使用模板环境对象提供的trin_blocks和lstrip_blocks属性设置,欠着删除Jinja2语句的第一个空行,后者删除Jinja2语句所在行之前的空格和tabs
app.jinja_env.trin_blocks = True
app.jinja_enc.lstrip_blocks = True

需要注意的是宏内的空白控制行为只能用第一种办法设置。

2.2 加载静态文件
  • 添加Favicon
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='favicon.ico') }}" >
  • 使用css框架
{% block styles %}
	<link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.min.css') }}" >
{% endblock %}

{% block scripts %}
	<script src="{{ url_for('static', filename='js/jquery.min.js') }}"></script>
{% endblock %}
  • 使用宏加载静态资源
<--定义宏-->
{% macro static_file(type, url, loacl=True) %}
	{% if local %}
		{% set url=url_for('static', filename=url) %}
	{% endif %}
	{% if type == 'css' %}
		<link rel="stylesheet" href="{{ url }}">
	{% elif type == 'js' %}
		<script src="{{ url }}"></script>
	{% endif %}
{% endmacro %}

<--使用宏-->
{% import "static.macros.html" as static %}

{{ static.static_file("css", "/static/css/style.css") }}
{{ static.static_file("js", "/static/js/script.js") }}
2.3 消息闪现

flask提供了一个非常有用的flash()函数,它可以用来闪现需要显示给用户的消息。

# 使用flash“闪现”消息
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        
        # 模拟用户登录验证
        if username == 'admin' and password == 'password':
            flash('登录成功!', 'success')
            return redirect(url_for('index'))
        else:
            flash('用户名或密码错误!', 'error')
    
    return render_template('login.html')

# 模板渲染flash消息
{% with messages = get_flashed_messages() %}
  {% if messages %}
    <ul class="messages">
      {% for message in messages %}
        <li class="{{ message[1] }}">{{ message[0] }}</li>
      {% endfor %}
    </ul>
  {% endif %}
{% endwith %}
2.4 自定义错误页面

flask提供了@app.errorhandler()装饰器来自定义错误页面。它接收三个参数,code:状态码,name:原因短语,description:错误描述。

@app.errorhandler(404)
def page_not_found(e):
	return render_template('error/404.html'), 404
2.5 在js和css中使用Jinja2
  1. 嵌入/行内式js/css
    难以维护,跳过。
  2. 定义为js/css变量
// script.js
var name = '{{ name }}';
console.log('Hello ' + name + '!');

/* style.css */
:root {
  --background-color: {{ bg_color }};
  --color: {{ text_color }};
}

#foo {
	color: var(--color);
	background-color: var(--background-color);
}

当然还有很多其他办法。文章来源地址https://www.toymoban.com/news/detail-791706.html

到了这里,关于flask web学习之模板(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从0开始使用flask搭建WEB前端可视化界面

    模板 将其中的 html 结尾的文件放入 template 文件夹,其余的放入 static 文件夹,再创建一个 python 文件使用 flask ,文件结构如下: 以该文件为例: 我们将所有的 html 文件放入 template 文件夹,其他文件夹如 js 、 css 、 vendor 等放入 static 文件夹( assets 直接放入static也可以) 移

    2024年02月01日
    浏览(47)
  • flask web 学习之用户认证与会话管理

    Flask-Login是一个用于处理用户认证和会话管理的Flask插件。它简化了在Flask应用程序中实现用户登录、登出以及保护视图等功能的过程。 一、安装及初始化 flask-login官方文档 在flask中进行配置: 完成初始化之后,就可以在应用中使用login_manager对象来处理用户认证和会话管理等

    2024年01月23日
    浏览(36)
  • 【Python】Web学习笔记_flask(3)——上传文件

    用GET、POST请求上传图片并呈现出来 首先还是创建文件上传的模板 然后需要定义几个函数: upload():路由函数,接收GET请求时,显示模板文件内容,接收post请求时,上传图片 allowed_file():检测上传的文件是否满足设置的类型 random_file():为上传的文件重新创建随机的不重复文

    2024年02月14日
    浏览(43)
  • 【Python】Web学习笔记_flask(4)——钩子函数

    钩子函数可以用来注册在请求处理的不同阶段执行出 Flask的请求钩子指的是在执行视图函数前后执行的一些函数, 之前是有4种,但是  before_first_request已经被删除了,使用时会报错 before_request:在每次请求前执行,比如校验权限,也可以用来记录用户最后的在线时间 after_r

    2024年02月14日
    浏览(44)
  • 【Python】Web学习笔记_flask(2)——get&post

    flask提供的request请求对象可以实现获取url或表单中的字段值 GET请求 从URL中获取name、age两个参数 POST请求 使用request.form可以接受表单数据 login.html模板: 获取用户名称、密码

    2024年02月14日
    浏览(43)
  • 【Python】Web学习笔记_flask(1)——get&post

    flask提供的request请求对象可以实现获取url或表单中的字段值 GET请求 从URL中获取name、age两个参数 POST请求 使用request.form可以接受表单数据 login.html模板: 获取用户名称、密码

    2024年02月14日
    浏览(38)
  • 【Python】Web学习笔记_flask(6)——会话&session对象

    处理利用cookie来判断用户登录外,也可以使用session来判断用户是否登录 html代码和cookie对象的设置相同    

    2024年02月12日
    浏览(43)
  • golang web学习随便记6-模板引擎

    以下代码是几乎最简单的一个模板,{{ . }} 表示执行模板时将嵌入的数据 程序也足够简单,就是解析模板文件得到模板对象,执行模板输出结果 运行结果为 模板可以是模板文件,也可以是字符串,在上述代码中添加一个处理器函数 其实,对于文件模板,也是可以先 New一个模

    2024年02月05日
    浏览(29)
  • 二、Flask学习之CSS

    1.1 直接在标签中添加 1.2 在头部添加 1.3 单独在文件添加 mycss.css html文件: 上面三种表示的结果是一样的。 CSS有多种选择器: ID选择器(使用#) 类选择器(使用.) 标签选择器 效果: 属性选择器 后代选择器 3.1高度和宽度 宽度是可以支持百分比的 div 等块级标签默认是有效

    2024年01月20日
    浏览(34)
  • 四、Flask学习之JavaScript

    JavaScript ,作为一种前端脚本语言,赋予网页生动的交互性和动态性。通过它,开发者能够操作DOM(文档对象模型)实现页面元素的动态改变、响应用户事件,并借助AJAX技术实现异步数据请求,为用户提供更流畅的浏览体验。在现代Web开发中,JavaScript不仅是构建丰富用户界面

    2024年01月24日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包