Pyramid: 如何在没有渲染器的情况下设置cookie?

11 投票
3 回答
5254 浏览
提问于 2025-04-17 09:36

在配置文件中:

config.add_route('lang', '/lang-{code}')

在视图中:

@view_config(route_name='lang')
def lang(request):
    code = request.matchdict['code']
    response = Response()
    response.set_cookie('lang', value=code, max_age=31536000) # max_age = year

    return HTTPFound(location=request.environ['HTTP_REFERER'])

这个机制很简单:有一个下拉菜单,里面有不同的语言,点击任何一种语言后,网站就会用新的语言刷新。

运行没有错误,但没有设置cookie……我哪里做错了?

谢谢!

3 个回答

0

通过使用 render_to_response 来设置 cookie

@view_config(route_name='index')  
def index_view(request):  
    lang = 'bn' 
    template = '../templates/index.jinja2'
    request.response.set_cookie('lang', lang) 
    return render_to_response(template, {'user_id':user_id}, request=request)
13

这个回答非常棒。还有一个选择是使用 HTTPFound 实例作为 Response

@view_config(route_name='lang')
def lang(request):
    code = request.matchdict['code']
    response = HTTPFound(location=request.environ['HTTP_REFERER'])
    response.set_cookie('lang', value=code, max_age=31536000) # max_age = year

    return response
13

HTTPFound 是一个可以接受头部信息的参数。你可以试试这样写:return HTTPFound(location='foo', headers=response.headers)

撰写回答