【发布时间】:2020-12-11 23:46:38
【问题描述】:
我从快速教程页面here 创建了一个简单的 Pyramid 应用程序,其中包含与问题相关的以下文件:
-
tutorial/__init__.py:
from pyramid.config import Configurator
def main(global_config, **settings):
config = Configurator(settings=settings)
config.include('pyramid_chameleon')
config.add_route('home', '/')
config.add_route('hello', '/howdy')
config.add_static_view(name='static', path='tutorial:static')
config.scan('.views')
return config.make_wsgi_app()
-
tutorial/views/views.py:
from pyramid.view import (
view_config,
view_defaults
)
@view_defaults(renderer='../templates/home.pt')
class TutorialViews:
def __init__(self, request):
self.request = request
@view_config(route_name='home')
def home(self):
return {'name': 'Home View'}
@view_config(route_name='hello')
def hello(self):
return {'name': 'Hello View'}
-
tutorial/templates/image.pt:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Quick Tutorial: ${name}</title>
<link rel="stylesheet"
href="${request.static_url('tutorial:static/app.css') }"/>
</head>
<body>
<h1>Hi ${name}</h1>
<img src="${filepath}">
</body>
</html>
我想向我的应用程序添加一个 URL 路由,这样当用户转到 www.foobar.com/{filename}(例如:www.foobar.com/test.jpeg)时,应用程序将显示来自服务器上绝对路径 /Users/s/Downloads/${filename} 的图像,如在上面的文件tutorial/templates/image.pt 中显示。
这是我尝试过的:
- 在文件
tutorial/__init__.py中,添加config.add_route('image', '/foo/{filename}')。 - 在文件
development.ini中,添加了设置image_dir = /Users/s/Downloads。 - 在文件
tutorial/views/views.py中添加如下视图image:
@view_config(route_name='image', renderer='../templates/image.pt')
def image(request):
import os
filename = request.matchdict.get('filename')
filepath = os.path.join(request.registry.settings['image_dir'], filename)
return {'name': 'Hello View', 'filepath': filepath}
但是这不起作用。如何获取使用 Pyramid 的资产的绝对路径?
【问题讨论】:
-
我想我在你的另一个问题中回答了这个问题stackoverflow.com/a/63542264/2214933
-
@StevePiercy 的问题是我有两个存储图像的文件夹,这就是我尝试使用 URL 模式匹配的原因。添加两个静态视图不起作用?如何使用绝对路径并使用两个目录进行图像托管?
-
我认为您并没有真正阅读我的回答,我说:“配置多个静态路由也可以,如果您想要的话。”
标签: pyramid