The caching is likely the problem since that's exactly what caching does. It stores the results of the query for the time specified to avoid querying the database. Thus you won't see the new values. I would strongly discourage using cache unless/until you actually need it (which is rare). It can easily lead to unexpected behavior like this.
Also, you can tighten up your code a lot which might make it easier to follow. For example: URL(request.application, request.controller, request.function, args = page.id)) could be: URL(request.function, args = page.id))