如何在web.py中处理URL路径?
我刚开始学习 web.py,代码中有很多硬编码的 URL,用在 a
标签的 href
属性里,比如
/login
或 /?type=example
。
问题是,
当我把应用程序设置在一个特定的路径下,而不是在 URL 的根目录时,比如
http://example.com/appname/
这个链接会把我导向像
http://example.com/login
这样的地方。
而我想要的链接是
http://example.com/appname/login
我该怎么处理这个问题呢?
1 个回答
3
在你的模板全局中让 web.ctx.homepath 可用,并在你的路径之前输出它。
来源于 http://webpy.org/cookbook/ctx
homepath 是用户请求的路径中被当前应用去掉的部分。也就是说,homepath 加上路径等于用户在 HTTP 中实际请求的路径。例如,如果请求的是 /admin,这个值是在启动时从环境变量 REAL_SCRIPT_NAME 中获取的。它会影响 web.url() 在提供的 URL 前面加上什么。这又会影响 web.seeother() 会跳转到哪里,这可能会和你的 URL 重写方案(比如 mod_rewrite)产生不好的互动。
template_globals = {
'app_path': lambda p: web.ctx.homepath + p,
}
render = template.render(my_template_dir, globals=template_globals, base="mylayout")
然后你应该能够在你的模板中输出 app_path。
<a href="$app_path('/login')">Login</a>