Python Pyramid中的文件响应“取消”了吗?

时间:2013-02-09 07:09:30

标签: python httpresponse pyramid

这里有三个Pyramid view_callables,用于设置包含数据和两个图像文件的页面。麻烦的是,只返回了一个图像(文件响应)。我似乎一次只能返回一张图片。如果我取出其中一个文件响应vc,则返回其他图像。但是,如果我有两个文件respone vc那里,只返回第二个图像。在我用第二个vc覆盖的第一个vc中是否有一些对象?

是否有更好的方法可以返回两个图像(文件),即使在第一个# title vc中也是如此?就像现在一样,即使它有效,我也必须从数据库中为同一个模板检索相同的文档3次。任何建议或线索将不胜感激。

# title
@view_config(
        route_name='title',
        renderer='templates/titles/title.jinja2')
def title(request):
    title = Title().find_one({'_id':ObjectId(request.matchdict['_id'])})
    result = dict(
            user = request.user,
            title = title)
    return result

# view title image
@view_config(route_name="view_title_image")
def jpg(request):
    fd = Title().find_one({'_id':ObjectId(request.matchdict['title_id'])}).TitleImage
    response = Response(content_type='application/jpg')
    response.app_iter = fd.File
    print fd
    return response

# view trailer thumbnail
@view_config(route_name="view_trailer_thumbnail")
def jpg(request):
    fd = Title().find_one({'_id':ObjectId(request.matchdict['title_id'])}).TrailerThumbnail
    response = Response(content_type='application/jpg')
    response.app_iter = fd.File
    print fd
    return response

以下是来自__init__的路线配置:

# title
config.add_route('title', '/title/{_id}')

# view title image
config.add_route('view_title_image', '/view/title_image/{title_id}')

# view title image
config.add_route('view_trailer_thumbnail', '/view/trailer_thumbnail/{title_id}')

这是它在Jinja2模板中的使用方式:

<img src="/view/title_image/{{ title._id }}">

<img src="/view/trailer_thumbnail/{{ title._id }}">

1 个答案:

答案 0 :(得分:1)

我认为你的问题是两个视图都有名为jpg的函数。

虽然覆盖这样的函数不是一个好主意,但我认为这对于view_config装饰器来说根本不是问题。我唯一能想到的是,而不是记录对函数的引用,view_config计算出虚线路径的内容并记录它。

无论如何,给视图函数赋予不同的名称,你应该没问题。