Python Pyramid 静态资源
通常情况下,需要在模板响应中包含一些资源,即使有一定的动态数据也不会改变。这样的资源被称为静态资产。媒体文件(.png,.jpg等),用于执行一些前端代码的JavaScript文件,或用于格式化HTML的样式表(.css文件)是静态文件的例子。
Pyramid将这些静态资产从服务器文件系统的指定目录中提供给客户端的浏览器。配置器对象的 add_static_view() 方法定义了路由的名称和包含静态文件(如图片、JavaScript和CSS文件)的文件夹路径。
按照惯例,”static “目录被用来存储静态资产,add_static_view()的使用方法如下
config.add_static_view(name='static', path='static')
一旦定义了静态路由,在HTML脚本中使用静态资产的路径就可以通过 request.static_url() 方法获得。
静态图片
在下面的例子中,Pyramid的标志将在logo.html模板中被呈现。因此,”pyramid.png “文件首先被放在静态文件夹中。现在它可以作为HTML代码中标签的src属性使用。
<html>
<body>
<h1>Hello, {{ name }}. Welcome to Pyramid</h1>
<img src="{{request.static_url('app:static/pyramid.png')}}">
</body>
</html>
例子
应用程序代码用 add_static_view() 更新配置器,并定义 index() 视图来渲染上述模板。
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
@view_config(route_name='index', renderer='templates/logo.html')
def index(request):
return {'name':request.matchdict['name']}
if __name__ == '__main__':
with Configurator() as config:
config.include('pyramid_jinja2')
config.add_jinja2_renderer(".html")
config.add_route('index', '/{name}')
config.add_static_view(name='static', path='app:static')
config.scan()
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 6543, app)
server.serve_forever()
输出
运行上述代码来启动服务器。在你的浏览器中使用 http://localhost:6543/Guest 作为 URL。这里’Guest’是由 matchdict 对象中的view函数拾取的路径参数,并作为上下文传递给logo.html模板。浏览器现在会显示Pyramid标志。
Javascript作为静态资产
这里是另一个静态文件的例子。一个JavaScript代码 hello.js 包含一个 myfunction() 的定义,将在以下HTML脚本(templates\hello.html)的 onload 事件中执行。
<html>
<head>
<script src="{{request.static_url('app:static/hello.js')}}"></script>
</head>
<body onload="myFunction()">
<div id="time" style="text-align:right; width="100%"></div>
<h1><div id="ttl">{{ name }}</div></h1>
</body>
</html>
例子
保存在静态文件夹中的 hello.js 代码如下所示
function myFunction() {
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
var msg="";
if (h<12)
{
msg="Good Morning, ";
}
if (h>=12 && h<18)
{
msg="Good Afternoon, ";
}
if (h>=18)
{
msg="Good Evening, ";
}
var x=document.getElementById('ttl').innerHTML;
document.getElementById('ttl').innerHTML = msg+x;
document.getElementById('time').innerHTML = h + ":" + m + ":" + s;
}
输出
该函数检测当前时间值,并根据一天中的时间为 msg 变量分配适当的值(早上好,下午好或晚上好)。
将 hello.js 保存在 static 文件夹中,hello.html保存在 templates 文件夹中,并重新启动服务器。浏览器应该显示当前时间和下面相应的信息。