Flask入门(二)Jinja2 模板

本文详细介绍了Flask使用Jinja2模板进行Web开发的方法,包括渲染模板、传递参数、If判断、for循环、过滤器、模板继承与block、URL链接以及加载静态文件。通过实例展示了如何在Flask中高效地操作模板,提升Web应用的开发效率。

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

Flask渲染Jinja2模板和传参:

1.如何渲染模板:

  • 模板放在‘templates’文件夹下。

  • 从‘flask’中导入‘render_template’函数。

  • 在视图函数中,使用‘render_template’函数渲染模板。注意:只需要填- 写模板的名字,不需要写‘template’文件夹的名字。因为flask框架会自动调用该文件夹。(但如果是template内的目录内的文件则需要一个相对目录路径)

2.模板传参:

  • 如果只有一个或者少量参数,直接在‘render_template’函数中添加关键字参数就可以了。
from flask import Flask , render_template
app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index.html',username = 'noah')
  • 如果有多个参数,那么可以把所有参数放在字典中。
  • 在模板中如果要使用一个变量,HTML语法是:{{pramas}}。
  • 访问模型中的属性或字典,可以通过‘{{pramas.name}}’的形式,或是用’{{pramas{[‘age’]}}’形式。
<body>
    就像下面这样:
    <p>用户名:{{ username }}</p>
    <p>年龄:{{ age }}</p>
    <p>性别:{{ gender }}</p>
    <hr>#hr是分割线
    <p>用户名:{{ person.name }}</p>
    <p>用户名:{{ person.age }}</p>
    <hr>
    <p>百度:{{ websites.baidu }}</p>
    <p>谷歌:{{ websites.google }}</p>
</body>
  • 然后在‘render_template’中用**两个星号把字典转化为关键字参数。
from flask import Flask , render_template
app = Flask(__name__)
@app.route('/')
def index():
    context={
        'username' : 'noah',
        'age' : '19',
        'gender' : 'male'
        'person' : p,
        'websites' : {
            'baidu': 'www.baidu.com',
            'google': 'www.google.com'
    }
    }
    #直接写名字,不用写templates文件夹的名字,Flask会自动去这个文件夹寻找
    return render_template('index.html',**context)

3.If判断句

HTML中语法
{% if xxx %}
{% eles %}
{% endif %}
*if的使用和python相差无几

4.for循环遍历

HTML中语法
遍历字典:
*和python相差无几
可以使用
keys(),items(),values(),iteritems(),iterkeys(),itervalues()

{% for k,v in user.items() %}
    <p>{{ k }}:{{ v }}</p>
{% endfor %}

遍历列表也一样:

{% for website in websites %}
    <p>{{ website }}</p>
{% endfor %}

一个小案例,渲染四大名著给前端,然后前端用表格显示:

{# HTML内代码 #}
<table>{# Table 表格 #}
    <thead>{# Tablehead 表头 #}
    <th>书名</th>{# 表头1 #}
    <th>作者</th>{# 表头2 #}
    <th>价格</th>{# 表头3 #}
    </thead>
    <tbody>
    {% for book in books %}{# Tablebody 对应内容 #}
        <tr>
        <td>{{ book.name }}</td>{# 数据1 #}
        <td>{{ book.author }}</td>{# 数据2 #}
        <td>{{ book.price }}</td>{# 数据3 #}
        </tr>
#Flash内代码
def index():
    books =[{   #生成List,List内有Dict
        'name' : '西游记',
        'author' : '吴承恩',
        'price':109,
    },
    {   'name' : '红楼梦',
        'author' : '曹雪芹',
        'price':200,

    },{
        'name': '三国演义',
        'author': '罗贯中',
        'price': 99,
    },{
        'name': '水浒传',
        'author': '施耐庵',
        'price': 150,
    }]
    return render_template('index.html',books=books)

过滤器

  • 介绍:过滤器可以处理一些变量,把原始的变量经过处理后再展示出来。作用的对象是变量。
    语法:
{{avatar| default('xx默认值xx')| length}}

常用过滤器:
1、default:如果当前变量不存在则使用默认值。
2、length:求List或者Dict或者字符串或者元组的长度。

继承和block

继承的作用:可以把一些公共的代码放在公共模板中,避免写重复的代码。
继承的实现:

{% extends 'basic.html' %}
{#这样就会把'basic.html'完全复制过来#}

block的实现:

{#在父模板中设置block#}
{% block main %}{% endblock %}
{% block head %}{% endblock %}
{% block title %}{% endblock %}

{#在字模板中输入同样的内容,并且把要加入的内容写进去#}
{% block main %}内容{% endblock %}
{% block head %}样式{% endblock %}
{% block title %}标题{% endblock %}

block的作用: 可以让子模板实现一些自己的需求,父模板必须提前定义好。当然内容一定要写在block内。

url链接

作用:使用url_for(‘视图函数名称’)可以反转成url地址

加载静态文件

1、语法:url_for(‘static’,filename=‘路径’)。
2、加载静态文件:Flask会从static开始寻找,不用再写static路径。
3、可以加载css文件,js文件,image文件。

{#CSS#}
<link rel="stylesheet" href="{{url_for('static',filename='css/index.css') }}">

{#JavaScript#}
<script src="{{ url_for('static',filename='js/index.js') }}"></script>

{#Image#}
<img src="{{ url_for('static',filename='images/LOGO.jpeg') }}" alt="">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值