Search code examples
pythonpyramid

Redirecting with updated requests parameters


I write grid filters and some functionality is not implemented yet, so I want to redirect people to default grid when they try to use the unimplemented features. In my controller I have access to a request object. Can I update its parameters and use my request object, to redirect the user?

I tried to update request.params directly but it's a read-only object. Tried to use httpfound but it doesn't accept params.

try:
    self._parse_filters(filters)
except NotImplementedError:
    url = self.request.route_
    self.reset_filters = True
    self.error = 'Not Implemented Functionality. Default filters loaded'
    self._parse_filters(self.default_filters)

Solution

  • You need to build a new URL (possibly based on the parameters in your current request) and use HTTPFound to generate a redirect. To generate the query part of your new url you can use _query parameter of request.route_url method or simply use urllib.urlencode.

    new_url = request.route_url(
        'not_implemented_view', 
        blah='boo',
        _query={'sort':'asc'}  # you can give it request.GET if you want all the same url parameters
    ) 
    return HttpFound(new_url)