Python_day23--jinja2、过滤器、自制过滤器、宏、Time模块、模板的继承

本文介绍了Jinja2模板引擎的基础知识,包括变量显示、过滤器的使用,如IP和时间过滤,以及如何创建自定义过滤器。详细阐述了宏的概念和用法,并探讨了Python的time模块,如时间戳和struct_time表示。最后,文章解释了模板继承的重要性,展示了如何通过继承创建一致的页面结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Jinja2简介

Jinja2是基于python模板引擎,功能比较类似于于PHPsmartyJ2eeFreemarkervelocity。 它能完全支持unicode,并具有集成的沙箱执行环境,应用广泛。jinja2使用BSD授权。

例:

<title>{% block title %}{% endblock %}</title>
<ul>
{% for user in users %}
  <li><a href="{
  { user.url }}">{
  { user.username }}</a></li>
{% endfor %}
</ul>

特性:

  • 沙箱中执行
  • 强大的 HTML 自动转义系统保护系统免受 XSS
  • 模板继承
  • 及时编译最优的 python 代码
  • 可选提前编译模板的时间
  • 易于调试。异常的行数直接指向模板中的对应行。
  • 可配置的语法

二、jinja2变量显示

from flask import Flask, render_template

app = Flask(__name__)

class User(object):
    def __init__(self, name, passwd):
        self.name = name
        self.passwd = passwd


    def __str__(self):
        return '<User: %s>' %(self.name)

# 视图函数
@app.route('/')
def index():
    """下面的变量均为我们要传递的参数"""
    name = 'westos'
    li = [1,2,3,4]
    d = dict(a=1, b=3, c=6)
    u = User('root', 'redhat')
    return   render_template('index.html',  #这里为链接的页面内容
                             name = name,   #传递参数
                             li = li,       #传递参数
                             d = d,         #传递参数
                             u = u)         #传递参数

if __name__ == "__main__":
    # 运行web app
    app.run(host='0.0.0.0', port=9008)

index.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页</title>
</head>
<body>

<h3>字符串变量显示</h3>
{
  { name }}


<h3>列表</h3>

{
  { li }}


<h3>字典</h3>
{
  { d }}

<!--jinja2的for循环-->

    <table border="1px" width="80%">
        {% for i in d %}
            {% if i in ['a', 'c'] %}
            <tr style="background-color: lightgray">
                <td>{
  { i }}</td>
                <td>{
  { d[i]}}</td>
            </tr>
            {% else %}
                 <tr style="background-color: lightpink">
                <td>{
  { i }}</td>
                <td>{
  { d[i]}}</td>
            </tr>

            {% endif %}

        {% endfor %}

    </table>

<h3>对象</h3>
{
  { u }}



<table border="1px">
    <tr>
        <td>用户名</td>
        <td>密码</td>
    </tr>


    <tr>
        <td>{
  { u.name }}</td>
        <td>{
  { u.passwd }}</td>

    </tr>
</table>
</body>
</html>

三、过滤器

变量可以通过 过滤器 修改。过滤器与变量用管道符号( | )分割,并且也 可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作为 后一个过滤器的输入。

例如 { { name|striptags|title }} 会移除 name 中的所有 HTML 标签并且改写 为标题样式的大小写格式。过滤器接受带圆括号的参数,如同函数调用。这个例子会 把一个列表用逗号连接起来: { { list|join(', ') }} 。

from flask import Flask,render_template

app = Flask(__name__)

class user(object):
    def __init__(self,name,passwd):
        self.name = name
        self.passwd = passwd


    def __str__(self):
        return "User : %s" %(self.name)



@app.route('/')
def index():
    name = "reDhat"
    li = [1,2,4,5]
    dic = dict(a=1,b=2,c=3)
    u = user('student','redhat')
    return render_template('index2.html',name=name,li = li,dic = dic, u = u)


if __name__ == "__main__":
    app.run('0.0.0.0',port=9009)

index.html 页面过滤

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h2>字符串进行过滤</h2>
{
  { name }}

<p style="color: #81a2be">{
  { name | upper }}</p>
<p style="color: #81a2be">{
  { name | lower }}</p>
<p style="color: #81a2be">{
  { name | capitalize }}</p>
<p style="color: #81a2be">{
  { name | upper |reverse }}</p>


<h2>对数字进行过滤操作</h2>
<!--自动进行四舍五入-->
<p style="color: #969896">{
  { 1.534234234 | round }}</p>
<p style="color: #969896">{
  { 1.534234234 | round(3 , 'floor') }}</p>
<p 
### Jinja2 模板引擎概述 Jinja2 是一个现代的、设计师友好的模板引擎,专为 Python 设计。该工具不仅继承Python 的语法特性,还扩展了许多实用的功能,如模板继承定义和过滤器应用等[^2]。 ### 安装方法 为了安装 Jinja2,可以利用 pip 工具来简化这一过程。通过命令行执行如下指令即可完成安装: ```bash pip install jinja2 ``` 此方式能够确保获取到最新稳定版本并自动解决依赖关系。 ### 基础使用案例 下面展示了一个简单的 Jinja2 使用实例,说明如何创建模板文件并通过传递参数生成最终页面内容。 #### 创建 HTML 模板 `template.html`: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{ title }}</title> </head> <body> <h1>Hello, {{ name }}!</h1> <p>Today is a good day.</p> <ul> {% for item in items %} <li>{{ loop.index }}: {{ item }}</li> {% endfor %} </ul> </body> </html> ``` #### 编写 Python 代码以渲染上述模板: ```python from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('.')) template = env.get_template('template.html') output = template.render( title='Welcome Page', name='Alice', items=['apple', 'banana', 'cherry'] ) print(output) ``` 这段程序会读取当前目录下的 `template.html` 文件,并将其编译成可填充数据的对象;随后调用 `.render()` 方法传入具体的数据值,最后打印出完整的HTML字符串[^1]。 ### 高级特性和优势 除了基本功能外,Jinja2 还支持更复杂的逻辑表达式、自定义测试函数、全局变量设置等功能。这些特性极大地增强了模板系统的灵活性与表现力,使其成为 Web 应用开发中的强大辅助工具[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值