psycat
psycat

Reputation: 513

How to import modules into web.py templates?

I have following piece of code:

render = web.template.render('templates/')
app = web.application(urls, globals())

I read about template imports in the web.py cookbook.

Now, when I try to import re in a template:

render = web.template.render('templates/', globals={'re':re})
app = web.application(urls, globals())

I got an error:

<type 'exceptions.TypeError'> at /'dict' object is not callable

and this line showed in the traceback: app = web.application(urls, globals()).

But when I modify it:

app = web.application(urls)

the error is gone, and re is imported in my template.

I don't understand how globals={'re': re} in web.template.render breaks it?

Why I can't keep both globals as in second example?

Upvotes: 0

Views: 2572

Answers (1)

davidavr
davidavr

Reputation: 14203

I'm guessing there is something else you are doing in your script or template that is causing that error. If you showed the complete example, then it would be easier to see. Here is a working example:

import web
import re

urls = ('/', 'index')
render = web.template.render('templates/', globals={'re':re})
app = web.application(urls, globals())

class index:
    def GET(self):
        args = web.input(s='')
        return render.index(args.s)

if __name__ == '__main__':
    app.run()

And the template, index.html:

$def with(s)

$code:
    if re.match('\d+', s):
        num = 'yes'
    else:
        num = 'no'

<h1>Is arg "$:s" a number? $num!</h1>

Browse to http://localhost:8080/?s=123 to try it.

Upvotes: 5

Related Questions