NeilJiang
NeilJiang

Reputation: 223

How to handle url path in web.py?

I'm new to web.py, and use a lot of hardcoded url in my code for href in tag a,like
/loginor/?type=example.

The problem is,
when I set my application running under a certain path, not the root of a URL, like
http://example.com/appname/

The link will direct me to some place like
http://example.com/login

While the expected/wanted one is
http://example.com/appname/login

How do I handle this?

Upvotes: 0

Views: 1096

Answers (1)

Andrey Kuzmin
Andrey Kuzmin

Reputation: 4479

Make web.ctx.homepath available in your template globals, and output it before your paths.

From http://webpy.org/cookbook/ctx

homepath – The part of the path requested by the user which was trimmed off the current app. That is homepath + path = the path actually requested in HTTP by the user. E.g. /admin This seems to be derived during startup from the environment variable REAL_SCRIPT_NAME. It affects what web.url() will prepend to supplied urls. This in turn affects where web.seeother() will go, which might interact badly with your url rewriting scheme (e.g. mod_rewrite)

template_globals = {
    'app_path': lambda p: web.ctx.homepath + p,
}

render = template.render(my_template_dir, globals=template_globals, base="mylayout")

Then you should be able to output app_path in your templates

<a href="$app_path('/login')">Login</a>

Upvotes: 3

Related Questions