Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

webapp2.uri_for unable to build URI due to missing keyword argument #76

Open
GoogleCodeExporter opened this issue May 5, 2015 · 0 comments

Comments

@GoogleCodeExporter
Copy link

What steps will reproduce the problem?
1. Add the following route to your app:

app = webapp2.WSGIApplication([
    webapp2.Route(r'/logout/<page_id:.*>', handler=views.LogoutPage, name='logout', defaults={'page_id': ''})
], debug=True)

2. Add the following view to your app (located in views.py):

class LogoutPage(webapp2.RequestHandler):
    def get(self, page_id=''):
        return self.redirect('/' + page_id)

3. Create a custom Jinja2 template filter like this:

def url(name, **kwargs):
    return webapp2.uri_for(name, **kwargs)

4. Create a Jinja2 template with the following line:

<a href="{{ 'logout'|url(page_id='') }}">logout</a>

What is the expected output? What do you see instead?
I expect to see the correct URI for the handler when the template is rendered.  
Instead I get this:

  File "/base/data/home/apps/s~myapp/5/templates/base_back_admin.html", line 12, in block "link_area"
   <a href="{{ 'logout'|url(page_id='') }}">logout</a>
  File "/base/data/home/apps/s~myapp/5/tags.py", line 368, in url
    return webapp2.uri_for(name, **kwargs)
  File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1706, in uri_for
    return request.app.router.build(request, _name, args, kwargs)
  File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1224, in default_builder
    return route.build(request, args, kwargs)
  File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 978, in build
    path, query = self._build(args, kwargs)
  File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1002, in _build
    name.strip('_'))
KeyError: 'Missing argument "page_id" to build URI.'

What version of the product are you using? On what operating system?
I am using the webapp2 module included in the GAE SDK v1.7.5 with Python 2.7 on 
a Mac OS X Snow Leopard (10.6.8).

Please provide any additional information below.
This works flawlessly in the development SDK but fails with the above error on 
GAE production servers.  As you can see from my code, I used the defaults 
parameter in the url pattern to send a default page_id argument to the view.  I 
also gave the page_id parameter in the view definition a default value.  Then I 
even sent the page_id value manually as an argument in the url function called 
from the template filter.  I tried every combination of one or more of these 
three methods, but the production app still claims the page_id argument is 
missing.  I don't know what to do since this works on the development server.

Original issue reported on code.google.com by [email protected] on 5 Mar 2013 at 11:31

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant