一周学会Django5 Python Web开发-Jinja3模版引擎-模板语法

锋哥原创的Python Web开发 Django5视频教程:

2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计37条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、第3讲 Django5创建项目(用命令方式)等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV14Z421z78C/尽管Jinja3的设计思想来源于Django 的模板引擎,但在功能和使用细节上,Jinja3比Django的模板引擎更为完善,而且Jinja3的模板语法在使用上与 Django的模板引擎存在一定的差异。 由于Jinja3有模板设计人员帮助手册(官方文档: https://jinja.palletsprojects.com/en/3.1.x/),并且官方文档对模板语法的使用说明较为详细,因此这里只讲述Jinja3与 Django模板语言的使用差异。

我们把helloworld子项目下templates下的index.html复制到父项目下的templates下,然后进行修改:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
字符串:{{ msg }}<br>
字典类型:{{ msg2.tom }},{{ msg2.cat }},{{ msg2.wzw }}<br>
对象:{{ msg3.name }},{{ msg3.age }}<br>
列表:{{ msg4.0 }},{{ msg4.1 }},{{ msg4.3 }},{{ msg4.2 }}<br>
元组:{{ msg5.0 }},{{ msg5.4 }},{{ msg5.1 }},{{ msg5.2 }},{{ msg5.3 }}

<h3>模板标签</h3>
<p>遍历for标签:</p>
{% for item in msg4 %}
    <p>这个是第{{ loop.length }}次循环</p>
    {% if loop.first %}
        <p>这个是第一项:{{ item }}</p>
    {% elif loop.last %}
        <p>这个是最后一项:{{ item }}</p>
    {% endif %}
{% endfor %}
<p>判断if标签:</p>
{% if msg == '模板变量' %}
    <p>模板变量</p>
{% elif msg == '模板变量2' %}
    <p>模板变量2</p>
{% else %}
    <p>其他</p>
{% endif %}
<p>url标签</p>
{#<a href="{% url 'index' %}">请求index</a>#}
<a href="{{ url('index') }}">请求index</a>
<p>with标签</p>
{% with info=msg %}
    {{ info }}
{% endwith %}

</body>
</html>

运行测试:

在遍历对象,列表,元组的时候,假如元素或者属性不存在,Jinja3会返回具体的报错信息:no such element

以及url函数用法不一样;在遍历for标签上,属性页不一样,内置的对象是loop

for函数模板变量:

Variable Description
loop.index 循环的当前迭代(索引从1开始)
loop.index0 循环的当前迭代(索引从0开始)
loop.revindex 循环结束时的迭代次数(索引从1开始)
loop.revindex0 循环结束时的迭代次数(索引从0开始)
loop.first 如果是第一次迭代,就为True
loop.last 如果是最后一次迭代,就为True
loop.length 序列中的项目数,即循环总次
loop.cycle 辅助函数,用于在序列列表之间循环
loop.depth 当前递归循环的深度,从1级开始
loop.depth0 当前递归循环的深度,从0级开始
loop.previtem 上一次迭代中的对象
loop.nextitem 下一次迭代中的对象
loop.changed(*val) 若上次迭代的值与当前迭代的值不同,则返回True

我们把base.html和course.html也复制一份到父项目templates下;

base.html需要修改下:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        {% block title %}
            Python222学院
        {% endblock %}
    </title>
</head>
{# load不支持,要去掉 #}
{#{% load static %}#}
<body>
<div id="head">
{#  Django语法  #}
{#    <img src="{% static 'logo.png' %}"/>#}
{#  Jinja3语法  #}
    <img src="{{ static('logo.png') }}"/>
</div>
<div id="content">
    {% block content %}
        欢迎进入Python222学院
    {% endblock %}
</div>
<div id="footer">
    版权所有 www.python222.com
</div>
</body>
</html>

运行测试:

相比较Django,Jinja3在static函数用法上也有区别,模版继承用法基本一致。

相关推荐
white-persist1 分钟前
Python实例方法与Python类的构造方法全解析
开发语言·前端·python·原型模式
Java 码农26 分钟前
Centos7 maven 安装
java·python·centos·maven
倔强青铜三1 小时前
苦练Python第63天:零基础玩转TOML配置读写,tomllib模块实战
人工智能·python·面试
浔川python社1 小时前
《网络爬虫技术规范与应用指南系列》(xc—3):合规实操与场景落地
python
B站计算机毕业设计之家2 小时前
智慧交通项目:Python+YOLOv8 实时交通标志系统 深度学习实战(TT100K+PySide6 源码+文档)✅
人工智能·python·深度学习·yolo·计算机视觉·智慧交通·交通标志
IT森林里的程序猿2 小时前
基于机器学习方法的网球比赛胜负趋势预测
python·机器学习·django
正牌强哥2 小时前
Futures_ML——机器学习在期货量化交易中的应用与实践
人工智能·python·机器学习·ai·交易·akshare
倔强青铜三2 小时前
苦练Python第62天:零基础玩转CSV文件读写,csv模块实战
人工智能·python·面试
郝学胜-神的一滴2 小时前
Effective Python 第43条:自定义容器类型为什么应该从 `collections.abc` 继承?
开发语言·python
银行数字化转型导师坚鹏3 小时前
如何设计优秀的企业微信私域运营实战培训方案
大数据·python·企业微信