web.py中的超链接

3 投票
2 回答
1455 浏览
提问于 2025-04-17 08:59

我想知道怎么让 web.py 在我点击链接时加载一个页面。

在我的模板里有这个:

<a href='add.html'>首页</a>

但是当我点击“首页”时,出现了“找不到”的提示。

在我的应用程序中,我把 '/add' 路径指向了 'Add' 这个类,这个类会用模板 add.html 返回 'Boom!'。

urls = ('/', 'Index',
    '/add','Add')

class Add(object):
    def GET(self):
        return render.add('Boom!')

我觉得当我请求 /add.html 时,Add 类应该会处理这个请求并返回 'Boom!'。

可是我为什么总是收到“找不到”的提示呢?

2 个回答

5

要么把路径改成 "/add.html",要么把链接改成 "add"。

8

页面的URI以.html结尾,比如/add.html,这种情况的来源是,在静态托管环境中,这些通常只是单一的文本文件,里面是HTML内容,而这样的文件结尾就是.html。

但是你的系统是动态的,可以实时生成网页。它并不一定需要以.html结尾的页面。虽然如果你想的话,可以模仿传统的做法。

不过在现代的动态系统中,通常更倾向于页面根本不带结尾。

所以你可以像Ignacio建议的那样,直接去掉.html,请求/add页面,这样也是一个有效且独特的标识符。

如果你想保留.html结尾,那你也需要在路由中添加这个结尾。

urls = (
  '/', 'Index',
  '/add.html','Add',
)

你还可以有多个路由指向同一个资源,这样既可以使用/add,也可以使用/add.html,它们都有效并显示相同的内容,但内容重复会带来其他问题:

urls = (
  '/', 'Index',
  '/add','Add',
  '/add.html','Add',
)

我建议去掉.html。这意味着你可以保持你问题中的代码,并像这样创建指向页面的链接:

<a href="/add">add something</a>

撰写回答