码迷,mamicode.com
首页 > 其他好文 > 详细

Flask(2)

时间:2018-11-07 21:38:56      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:r.js   编写   extend   bug   难点   web   常见   file_path   val   

1、模板 - Templates
   1、什么是模板
     模板:模板是一个包含响应文本的文件(通常是html文件),在Flask 中就是允许响应给用户看的网页。
     该文件中允许包含"占位变量"来表示动态的内容,其具体值在请求中才能知道。"占位变量"最终会被真实的值所替换。
     模板最终也会被解析成字符串再响应给客户端,这一过程通常称为"渲染"。

    Flask中的模板是依赖于 Jinja2 的模板系统
   2、模板的设置
     默认情况下,Flask会在程序文件夹中的 templates 的子文件夹中搜索模板。
     默认情况下,需要手动创建 templates 文件夹。   
   3、模板的渲染
     作用:在视图函数中,通过 return render_template()将模板文件(xx.html)渲染成字符串之后,再响应给客户端浏览器
     函数:render_template(‘xxx.html‘,arg1=value1,arg2=value2)
             ex:return render_template(‘xxx.html‘)
             参数1 : xxx.html ,要渲染给客户端的html模板文件
             参数2 ~ n :要传递给模板动态显示的变量占位符,如果没有动态的变量占位符,则可以省略
             返回值:字符串
   4、模板中的语法(重难点)
     1、变量
         变量是一种特殊的占位符,告诉模板引擎该位置的值是从渲染模板时的数据中获取出来的。
         1、在视图中 :
             @app.route(‘/‘)
             def index():
                 return render_template(‘xxx.html‘,变量1=值1,变量2=值2,..)
                     ex:return render_template(‘xxx.html‘,name=‘laowang‘,age=35)
                 name 和 age  就是要传递到 xxx.html 中的变量
         2、在模板中:
             {{变量名}}
             <h1>{{name}}</h1>
         练习:
             在 01-template.html基础上,完成下列效果显示:
             歌名 :《绿光》
             作词 : 宝强
             作曲 : 乃亮
             演唱 : 羽凡
     ----------------

                书名 :《钢铁是咋练成的》
                 作者 : 奥斯特洛夫斯基
                 价格 : 32.5
                 出版社 :北京大学出版社
                 music=‘绿光‘
                 author=‘宝强‘
                 qu=‘乃亮‘
                 singer=‘羽凡‘
                 # locals():将当前函数内所有的局部变量封装成一个字典

                print(locals())
                 return render_template(‘01-template.html‘,params=locals())
     -------------------------------------
     2、过滤器
         1、什么是过滤器
             过滤器是允许在变量输出显示之前改变变量的值
         2、语法
             {{变量|过滤器}}
             Jinja2 模板中常见过滤器:
             过滤器名            说明
             capitalize          首字符变大写,其他字符变小写
             lower               把值转换成小写
             upper               把值转换成大写
             title               把值中的每个单词的首字符变大写
             trim                去掉值两边的空格
     3、标签
         1、什么是标签
         每个标签表示的是不同的服务器端的功能
         2、常用标签
         1、if标签
             1、基本if结构
                 {% if 条件 %}
                 {% endif %}

            2、if ... else ... 结构
                 {% if 条件 %}
                     满足条件时要运行的代码
                 {% else %}
                     不满足条件时要运行的代码
                 {% endif %}
             3、if ... elif ... elif ... else
                 {% if 条件1 %}
                     满足条件1,要运行的代码
                 {% elif 条件2 %}
                     满足条件2,要运行的代码
                 {% elif 条件3 %}
                     满足条件3,要运行的代码
                 {% else %}
                     以上条件都不满足的时候,要运行的代码
                 {% endif %}
         2、for 标签
             {% for 变量 in 元组|列表|字典 %}
             {% endfor %}
             在 Jinja2 模板的循环中,支持内部变量 - loop
             loop作用:记载当前循环中的一些相关信息
             loop 常用属性:   
                 1、index
                 用法:loop.index
                 作用:记录当前循环的次数,从1开始记录
                 2、index0
                 用法:loop.index0
                 作用:同上,从0开始记录
                 3、first
                 用法:loop.first
                 作用:值为True,则表示当前循环是第一次循环
                 4、last
                 用法:loop.last
                 作用:值为True,则表示当前循环是最后一次循环
         3、macro 标签 (宏)
             1、作用
                 相当于是在模板中声明函数
             2、语法
                 使用 {% macro %} 标签声明宏
                 <!-- 声明 -->
                 {% macro 名称(参数列表) %}
                     xxxx  xxxx
                 {% endmacro %}
                 <!-- 调用 -->
                 {{show(uname)}}
                 et:
                 <!-- 声明 -->
                 {% mscro show(str) %}
                     <h1>{{str}}</h1>
                 {% endmacro %}
            
                 <!-- 调用 -->
                 {{show(uname)}}
             3、在独立的文件中声明宏
                 为了方便重复使用,允许将宏放在单独的模板文件中声明定义
                 1、创建 macro.html 模板文件
                     作用:定义项目中要用到的所有的宏
                     ex:{% mscro show(str) %}
                         <h1>{{str}}</h1>
                     {% endmacro %}
                 2.在使用的网页中,导入 macro.html
                     {% import ‘macro.html‘ as macros %}       
         4、include 标签(模板的包含)
             作用:将其他的模板文件包含到当前的模板文件中。
             在多处重复使用的模板代码可以放在单独的文件中,可以被其他的模板所包含(引用)
             语法:{% include ‘xxx.html‘ %}
   5、静态文件处理
     1、什么是静态文件
         在Flask中不能与服务器动态交互的文件都是静态文件
         如:图片,css文件,js文件,音视频文件,...
             <img src="images/a.jpg">
             <link rel="" href="css/a.css">
             <script src="js/a.js"></script>
             <video src="mp4/a.mp4"></video>
             <audio src="music/a.mp3"></audio>
     2、静态文件的处理
         1、所有的静态文件必须放在名为 static 的目录中。static目录要放在项目的根目录处。
             结构:
             FlaskDemo02
                 run01.py
                 templates
                     01-xxx.html
                     02-xxx.html
                 static
                     images
                         a.jpg
                         b.jpg
                     js
                         body.js
                         slider.js
                     css
         2、所有的静态文件必须通过 /static/ 路径访问
             /static/images/a.jpg
             /static 要到静态资源目录中继续搜索
             ex:<img src="/static/资源路径">
-------------------------
作业:
     搭建 Blog 项目结构
     1.创建项目 - Blog
     2.将 所有的 html 文件 copy 到 templates 目录中作为模板
     3.创建 static 目录,将 js 目录,css目录,images目录 copy到 static 中
     4.创建 路由 /
         访问 根路径时,显示首页模板(index.html)
         要求:css,images,js 都能正常显示


         反向解析:
             url_for(‘static‘,filename=‘<file_path>‘)
             <img src="{{url_for(‘static‘,filename=‘images/b04.jpg‘)}}">



params = {
     ‘author‘: ‘奥斯特罗夫斯基‘,
     ‘dic‘: {‘WWC‘: ‘隔壁老王‘, ‘LZ‘: ‘吕泽‘, ‘WMZ‘: ‘老魏‘, ‘MM‘: ‘蒙蒙‘},
     ‘bookName‘: ‘钢铁是怎样炼成的‘,
     ‘tup‘: (‘水浒传‘, ‘三国演义‘, ‘红楼梦‘, ‘西游记‘),
     ‘price‘: 32.5,
     ‘list‘: [‘漩涡鸣人‘, ‘卡卡西‘, ‘自来也‘, ‘佐助‘],
     ‘person‘: <__main__.Person object at 0x7f157c2c9048>
}

params[‘author‘]           
   


 

1、静态文件地址的反向解析:
     url_for(‘static‘,filename=‘<file_path>‘)
     ex:
         <img src="{{url_for(‘static‘,filename=‘images/b04.jpg‘)}}">
         结果:/static/images/b04.jpg
2、模板的继承
     1、什么是模板的继承
         模板的继承类似于类的继承,如果在一个模板中出现的大量内容是另外一个模板的话,那么就可以使用继承的方式来简化开发
     2、语法
         1、父模板
             需要定义出哪些内容在子模板中是可以被重写的
             {% block 块名 %}
                 父模板中正常显示的内容
             {% endblock %}
             block:
                 定义允许在子模板中被修改的内容
                 1、在父模板中是可以正常显示的,没有任何影响
                 2、在子模板中是可以被重写的
         2、子模板
             1、需要指定继承来自哪个父模板
                 使用 {% extends ‘父模板名称‘ %} 来完成继承
             2、重写父模板中对应内容
                 使用 {% block 块名 %} 来重写父模板中的同名内容
                 {% block 块名 %}
                     此处编写的内容会覆盖掉父模板中同名block的内容。
                     允许通过 {{super()}} 来调用父模板中的内容。
                 {% endblock %}
                     ex:
                     {% extends ‘02-parent.html‘ %}
                     {% block content %}
                         {{ super() }}
                         <h1 style="color: red;">这是child主体</h1>
                     {% endblock %}

3、修改配置
     1、构建Flask 应用允许的指定配置信息
     app = Flask(__name__,template_folder=‘muban‘,static_url_path=‘/s‘,static_folder=‘/sta‘)
         1.template_folder
             指定存放模板的文件夹名称(设置模板的保存路径)
         2.static_url_path
             访问静态资源的路径(设置静态文件的访问路径,即映射到WEB中的访问路径)
             http://localhost:5000/s/xxx  查找静态资源文件
         3.static_folder
             指定存放静态文件的目录名称(映射到项目中的目录名称)
             在项目的根目录中 ,有一个名为 sta 的目录用于存放静态文件。   
     2、启动程序的运行配置
         app.run(debug = True,port = 5555,host = ‘0.0.0.0‘)
         host : 指定访问地址,0.0.0.0 表示局域网内的任何机器都可以访问网站
         查看ip:ifconfig

Flask(2)

标签:r.js   编写   extend   bug   难点   web   常见   file_path   val   

原文地址:https://www.cnblogs.com/py321/p/9925769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!