Python Pyramid - 静态资源


通常需要在模板响应中包含一些即使存在某些动态数据也保持不变的资源。此类资源称为静态资产。媒体文件(.png、.jpg 等)、用于执行某些前端代码的 JavaScript 文件或用于格式化 HTML(.css 文件)的样式表都是静态文件的示例。

Pyramid 将这些静态资源从服务器文件系统中的指定目录提供给客户端浏览器。Configurator 对象的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 代码中用作 <img> 标记的 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对象中的视图函数拾取的路径参数,并作为上下文传递给 logo.html 模板。浏览器现在显示Pyramid徽标。

Pyramid

Javascript 作为静态资源

这是静态文件的另一个示例。JavaScript 代码hello.js包含要在以下 HTML 脚本 (templates\hello.html) 中的onload事件上执行的myfunction()的定义

<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文件夹中,然后重新启动服务器。浏览器应显示当前时间及其下方相应的消息。

晚上好