博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python全栈 Web(Flask框架、变量、模板)
阅读量:6507 次
发布时间:2019-06-24

本文共 4319 字,大约阅读时间需要 14 分钟。

模板 Templates:
模板中的语法规范
变量:
变量时一种特殊的占位符   告诉模板引擎该位置的
值是从渲染模板时的数据中来获取的
在视图中:
@app.route("/temp")def temp():    return render_template("01_temp.html",uname="user name")
name和age就是要传递到xxx.html中的变量
在模板中:
{
{变量名}}
{<div></div>    {unam}}
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())
模板

<<{
{bookName}}>>

作者:{
{author}}

价格:{
{price}}

出版社:{
{publisher}}

<<{
{params.bookName}}>>

作者:{
{params.author}}

价格:{
{params.price}}

出版社:{
{params.publisher}}

变量可以传递任何类型参数 包括示例对象
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:
去掉两端空格

原始值:{
{params.uname}}

capitalize:{
{params.uname|capitalize}}

upper:{
{params.uname|upper}}

lower:{
{params.uname|lower}}

title:{
{params.uname|title}}

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

{
{params.list}}

{% endif %}

if-else: {% if params.uname %}

params.uname

{% else %}

登录

{% endif %}
for结构:
{% for 变量 in 元组/字典/列表 %}
遍历内容
{% endfor %}
for循环:            
{% for str in params.list %}

{

{str}}

{% endfor %}
    {% for str in params.tup %}
  • {
    {str}}
  • {% endfor %}
{% for key, value in params.dic.items() %}

{
{key}}:{
{value}}

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

{% macro show(str) %}

  • {
    {str}}
  • {% endmacro %}

    {% for str in params.list %} {

    {show(str)}} {% endfor %}

    为了方便重复使用 允许将宏放在单独的模板文件宏单独声明定义
    创建  macro.html 
    文件内可以写很多个宏  类似于函数模块
    使用时导入 macro.html
    {% import "macro.html" as macros %}
    调用:
    {
    {macro.show()}}
    模板的包含:
    在多处重复使用的模板代码可以放在单独的文件中 可以被其他的模板所包含(引用)
    {% include "xxx.html" %}
    静态文件:
    什么是静态文件?
    在Flask中不能与服务器动态交互的文件都是静态文件
    如:css,js,图片,音视频,压缩文件。。。。
    并且不能使用物理路径进行查找
    静态文件处理:
    所有的静态文件都保存在 项目文件中的一个 static 文件夹中
    static文件内可以创建子文件夹
    在访问静态文件时需要通过/static/资源路径 进行访问
    相当于将逻辑路径的控制权交给物理路径  
    后面就可以写物理路径进行查找文件了
    静态文件反向解析:
    url_for("static", filename="
    ")
    模板的继承:
    什么是模板的继承?
    模板的继承类似于类的继承 如果一个模板中出现大量模板的话
    那么就可以使用继承的方式来简化开发
    继承的语法:
    父模板中
    需要定义哪些内容在子模板中是可以被重写的
    {% block 块名 %}
    {% endblock %}
    block:
    应以允许定义在子模板中被修改的内容
           在父模板中正常显示 没有影响
               在子模板中可以被重写
        
    Title

    这是父模板中  头部

    {% block container %}

    这是父模板中  住部

    {% endblock %}

    这是父模板中  地部

    子模板中
    使用{% extends "父模板名称" %} 来完成继承
    使用{% block 块名 %} 来重写父模板中的同名内容
    {% block 块名 %}
    {% endblock %}
    {% extends "04_parent.html" %}{% block container %}    {
    { super() }}

    子标签

    {% 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")
    继承后可以无所以为的修改网页内容  想怎么该怎么改

    转载地址:http://yvzfo.baihongyu.com/

    你可能感兴趣的文章
    Myeclipse的默认工作区间怎么恢复提示框?
    查看>>
    安装Drush工具 -Centos
    查看>>
    第十二题 Merge Sorted Array
    查看>>
    斯坦福大学机器学习——高斯判别分析
    查看>>
    Oracle 12C 新特性之扩展数据类型(extended data type)
    查看>>
    DataTable 更改在有数据列的类型方法
    查看>>
    【DataStructure】Description and Introduction of Tree
    查看>>
    分布式服务跟踪及Spring Cloud的实现
    查看>>
    详解ASP.NET Core Docker部署
    查看>>
    fnmatch源码阅读
    查看>>
    U9249 【模板】BSGS
    查看>>
    Mac 上VitrualBox安装CentOS6.5 调整root分区的大小
    查看>>
    单片机小白学步系列(九) 用万用焊板搭建实验电路
    查看>>
    Tomcat PK Resin
    查看>>
    Linux系统中如何校验SHA1和MD5?
    查看>>
    python 回溯法 子集树模板 系列 —— 12、选排问题
    查看>>
    H3C交换机经常使用命令汇总
    查看>>
    跨域问题
    查看>>
    (转)全文检索技术学习(三)——Lucene支持中文分词
    查看>>
    SecureCRT图形界面(通过设置调用Xmanager - Passive程序)
    查看>>