当前位置: 首页 > news >正文

Python全栈 Web(Flask框架、变量、模板)

模板 Templates:
模板中的语法规范
变量:
变量时一种特殊的占位符   告诉模板引擎该位置的
值是从渲染模板时的数据中来获取的
在视图中:

@app.route("/temp")
def temp():
    return render_template("01_temp.html",uname="user name")

name和age就是要传递到xxx.html中的变量
在模板中:
{{变量名}}

    <title>{{unam}}</title>


Python代码
@app.route("/temp")
def temp():
    dic = {"bookName":"钢铁是咋炼成的",
           "author": "鲁迅",
           "price": 32.5 ,
           "publisher": "北京大学出版社"}

    # 字典传参  模板中直接用变量名  不需要params.xxx
    return render_template("01_temp.html", **dic)
    return render_template("01_temp.html", params=dic)


    # 第二种传参方式
    bookName = "钢铁是咋炼成的"
    author = "鲁迅"
    price = 32.5
    publisher = "北京大学出版社"
    return render_template("01_temp.html", **locals())
    return render_template("01_temp.html", params=locals())



模板
    <div>
        <h1><<{{bookName}}>></h1>
        <h3>作者:{{author}}</h3>
        <h3>价格:{{price}}</h3>
        <h3>出版社:{{publisher}}</h3>
    </div>
    <div>
        <h1><<{{params.bookName}}>></h1>
        <h3>作者:{{params.author}}</h3>
        <h3>价格:{{params.price}}</h3>
        <h3>出版社:{{params.publisher}}</h3>

变量可以传递任何类型参数 包括示例对象

    tup = ("刘德华", "郭富城", "黎明")

    list = ["胡歌", "神话", "仙剑"]


    class Person(object):

        def __init__(self):
            self.name = "None"

        def say(self):
            return "类方法"


    per = Person()
    return render_template("01_temp.html", params=locals())



过滤器:
什么是过滤器?
过滤是允许在变量输出显示之前改变变量的值
语法:
{{变量|过滤器}}
Jinja2 变量过滤器
capitalize:
首字母大写 其他小写
lower:
把值转换成全小写
upper:
把值转换成全大写
title:
把值中的每个单首字母全大写
trim:
去掉两端空格


        <h3>原始值:{{params.uname}}</h3>
        <h3>capitalize:{{params.uname|capitalize}}</h3>
        <h3>upper:{{params.uname|upper}}</h3>
        <h3>lower:{{params.uname|lower}}</h3>
        <h3>title:{{params.uname|title}}</h3>


控制结构:
if结构:
{% if 条件 %}
要执行的代码
{% endif %}
if-else:
{% if 条件 %}
瞒住条件要执行的代码
{% else %}
不满足执行
{% endif %}
if-elif-else:
{% if 条件 %}
瞒住条件要执行的代码
{% elif 条件 %}
瞒住条件要执行的代码
{% else %}
不满足执行
{% endif %}


        if结构:
        {% if params.list %}
            <h1>{{params.list}}</h1>
        {% endif %}

        <p>
            if-else:
            {% if params.uname %}
                <h1>params.uname</h1>
            {% else %}
                <h1><a href="{{url_for('login')}}">登录</a></h1>
            {% endif %}


for结构:
{% for 变量 in 元组/字典/列表 %}
遍历内容
{% endfor %}


        for循环:
            <div style="font-size: 22px;">
                {% for str in params.list %}
                    <p>{{str}}</p>
                {% endfor %}
            </div>

            <ul>
                {% for str in params.tup %}
                    <li>{{str}}</li>
                {% endfor %}
            </ul>

            <div style="color: red;">
                {% for key, value in params.dic.items() %}
                    <h2>{{key}}:{{value}}</h2>
                {% endfor %}






宏:
使用{% macro %}标签  声明宏


        宏:
            <p>
                <!--声明-->
                {% macro show(str) %}
                    <li style="background-color: aqua;">{{str}}</li>
                {% endmacro %}
            </p>

            <!--使用宏显示数据-->
            <p>
                {% for str in params.list %}
                    {{show(str)}}
                {% endfor %}
            </p>


为了方便重复使用 允许将宏放在单独的模板文件宏单独声明定义
创建  macro.html 
文件内可以写很多个宏  类似于函数模块
使用时导入 macro.html
{% import "macro.html" as macros %}
调用:
{{macro.show()}}
模板的包含:
在多处重复使用的模板代码可以放在单独的文件中 可以被其他的模板所包含(引用)
{% include "xxx.html" %}

静态文件:
什么是静态文件?
在Flask中不能与服务器动态交互的文件都是静态文件
如:css,js,图片,音视频,压缩文件。。。。
并且不能使用物理路径进行查找
静态文件处理:
所有的静态文件都保存在 项目文件中的一个 static 文件夹中
static文件内可以创建子文件夹
在访问静态文件时需要通过/static/资源路径 进行访问
相当于将逻辑路径的控制权交给物理路径  
后面就可以写物理路径进行查找文件了

静态文件反向解析:

		url_for("static", filename="<file_path>")
		<img src="{{ url_for('static', filename=) }}"


模板的继承:
什么是模板的继承?
模板的继承类似于类的继承 如果一个模板中出现大量模板的话
那么就可以使用继承的方式来简化开发
继承的语法:
父模板中
需要定义哪些内容在子模板中是可以被重写的
{% block 块名 %}
{% endblock %}
block:
应以允许定义在子模板中被修改的内容
       在父模板中正常显示 没有影响
           在子模板中可以被重写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>这是父模板中  头部</h1>
    {% block container %}
    <h1>这是父模板中  住部</h1>
    {% endblock %}
    <h1>这是父模板中  地部</h1>
</body>
</html>

子模板中
使用{% extends "父模板名称" %} 来完成继承
使用{% block 块名 %} 来重写父模板中的同名内容
{% block 块名 %}
{% endblock %}

{% extends "04_parent.html" %}

{% block container %}
    {{ super() }}
    <h1>子标签</h1>
{% endblock %}


自定义错误页面
404错误处理
@app.errorhandler(404)
def page_not_found(e):
return render_template("404.html"), 404


@app.errorhandler(404)
def Error_404():
    return render_template("404.html")


500错误处理
@app.errorhandler(500)
def internal_server_error(e):
return render_template("505.html"), 505



@app.errorhandler(505)
def Error_404():
    return render_template("505.html")



继承后可以无所以为的修改网页内容  想怎么该怎么改



相关文章:

  • 日本RHP2机器人不仅摔倒后能自行站起来 ,还能协助人类救灾
  • SimplifyDb java快捷操作数据库发布啦
  • PHP7中我们应该学习会用的新特性
  • 用户认证--------------auth模块
  • 贪吃蛇小游戏-----C语言实现
  • php+xml有什么用
  • SpringBoot(六)-- 静态资源处理
  • django开发-定时任务的使用
  • VB6实现真正的继承【转】
  • WPF 窗口
  • 三菱数控CNC系统G代码M代码大全
  • Java 注释
  • ansible debug模块学习笔记
  • idea常用快捷键
  • MySql 用户管理 中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):...
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Java教程_软件开发基础
  • Koa2 之文件上传下载
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • React as a UI Runtime(五、列表)
  • React 快速上手 - 07 前端路由 react-router
  • vue-router的history模式发布配置
  • 复杂数据处理
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 记一次和乔布斯合作最难忘的经历
  • 开发基于以太坊智能合约的DApp
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 微服务入门【系列视频课程】
  • 我的zsh配置, 2019最新方案
  • 中文输入法与React文本输入框的问题与解决方案
  • MyCAT水平分库
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (第一天)包装对象、作用域、创建对象
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (排序详解之 堆排序)
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)人的集合论——移山之道
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net Signalr 使用笔记
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 中 GetProcess 相关方法的性能
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net经典笔试题
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .project文件
  • ::