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() 方法获取静态资源的路径。

静态图像

在下面的示例中,将在 logo.html 模板中呈现 Pyramid 徽标。因此,首先将 "pyramid.png" 文件放置在 static 文件夹中。现在,它可以作为 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()

输出

运行上述代码以启动服务器。在浏览器中使用https://:6543/Guest作为 URL。这里“Guest”是视图函数在matchdict对象中获取的路径参数,并作为上下文传递给 logo.html 模板。浏览器现在将显示 Pyramid 徽标。

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>

示例

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

Good Evening
广告
© . All rights reserved.